32:合唱队

题目描述:计算最少出列多少位同学,使得剩下的同学排成合唱队形

说明:N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。

合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,   则他们的身高满足存在i(1<=i<=K)使得Ti<T2<......<Ti-1<Ti>Ti+1>......>TK。

你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入描述:整数N

输出描述:最少需要几位同学出列

输入例子:

8

186 186 150 200 160 130 197 200

输出例子:

4

思路:找最长递增子序列,分别从左找一次,从右找一次,累加对应位置求和,(问题:为什么要合并)找出最大递增子序列和。

下面代码本地跑ok  牛客出现问题

 1 package huawei2;
 2
 3 import java.lang.reflect.Array;
 4 import java.util.Arrays;
 5 import java.util.Scanner;
 6
 7 /*题目描述
 8 计算最少出列多少位同学,使得剩下的同学排成合唱队形
 9 说明:
10 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
11 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,   则他们的身高满足存在i(1<=i<=K)使得Ti<T2<......<Ti-1<Ti>Ti+1>......>TK。
12      你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
13
14 输入描述:整数N
15 输出描述:最少需要几位同学出列
16 输入例子:
17 8
18 186 186 150 200 160 130 197 200
19 输出例子:
20 4*/
21 public class MaxMid {
22
23     public static void main(String[] args) {
24         Scanner in = new Scanner(System.in);
25         while(in.hasNext())
26         {
27             int count = in.nextInt();
28             int[] input = new int[count];
29             int result[] = new int[count];
30             for(int i = 0;i<count;i++)
31             {
32                 input[i] = in.nextInt();
33             }
34
35             //从左到右找最长子序列长度,不一定连续,所以在for循环的时候i位置要跟它前面所有的元素比较
36             //left[i]记录到当前位置i的最长子序列长度
37             int left[] = new int[count];
38             Arrays.fill(left, 1);
39             for(int i = 1; i<count; i++)
40             {
41                 for(int j = i-1; j>=0; j--)
42                 {
43                     if(input[i] > input[j])//递增
44                     {
45                         if(left[j]+1 > left[i])
46                         {
47                             left[i] = left[j]+1;
48                         }
49                     }
50                 }
51             }
52             //从右到左找最长子序列长度
53             int right[] = new int[count];
54             Arrays.fill(right, 1);
55             for(int i = count-2; i > 0; i--)
56             {
57                 for(int j = i+1; j<count; j++)
58                 {
59                     if(input[i] > input[j])//递增
60                     {
61                         if(right[j]+1 > right[i])
62                         {
63                             right[i] = right[j]+1;
64                         }
65                     }
66                 }
67             }
68             //合并
69             for(int i = 0; i < count; i++)
70             {
71                 result[i] = left[i] + right[i];
72             }
73             //求合并之后的最大值
74             int max = 0;
75             for(int i  = 0; i<count; i++)
76             {
77                 if(max<result[i])
78                 {
79                     max = result[i];
80                 }
81             }
82             System.out.print(count-max+1);
83         }
84     }
85
86 }
87 /*测试用例:
88 692 160 459 759 192 1251 1070 77 365 428 291 1013 521 86 121 87 731 1249 238 861 605 780 103 501 1380 326 683 506 1067 949 625 148 1106 937 659 28 1059 826 98 938 1175 1270 161 790 939 1235 729 1232 1221 390 744 1245 1298 157 391 881 812 1202 714 1287 1126 140 783 717 144 889 795 713 12 151 137 458 374 38 256 1058 1052 642 557 240 294 473 1077 815 153 682 384 520 1016 821 556 418 890 1308 1042 704 1203 1362 168 822 1362 973 282 1256 1229 235 463 408 708 920 950 1193 285 805 408 445 1091 980 761 373 48 588 1086 933 476 874 1166 513 1165 532 129 135 1022 236 1266 1370 365 22 583 1261 756 908 1070 322 1148 1041 935 601 548 784 1270 1306 1166 31 203 1230 523 1336 590 596 673 199 456 827 544 48 270 249 336 209 926 464 402 1074 135 582 1014 750 758 509 380 925 598 241 706 768 729 467 741 1202 49 1206 297 827 1139 1100 372 312 1014 328 678 303 245 382 1228 7 339 215 1193 1214 1007 582 613 695 338 442 196 54 395 232 815 573 807 1199 519 1016 53 1267 835 1090 547 1052 1199 960 1192 841 1025 29 131 1291 1341 182 671 663 609 1177 905 86 907 55 693 1249 59 926 541 1245 1301 57 687 999 92 175 747 788 741 978 139 481 1362 741 419 1153 454 670 969 820 463 879 1075 783 304 1273 773 851 1088 1016 1267 803 589 122 357 5 106 396 98 1099 1152 176 960 1264 8 321 303 1201 832 151 877 977 178 1339 749 358 1192 111 1141 512 590 827 363 1232 685 933 975 1222 850 1348 1236 554 658 115 1337 1016 977 269 62 1086 291 29 99 683 824 1240 100 1 573 1357 149 364 790 536 40 1246 939 263 1161 462 1373 974 712 791 515 1126 370 1245 1052 856 657 1 1292 437 380 315 988 939 1068 618 362 407 1176 362 1206 27 1113 1065 1166 1193 942 637 443 1053 44 1366 200 680 450 636 1271 457 687 1327 1302 888 695 176 790 916 693 444 289 410 1291 1030 155 801 1129 478 1123 424 91 1057 1059 535 142 490 234 982 220 368 385 1203 854 63 50 454 440 1283 737 210 832 75 1045 1110 1326 1056 589 177 161 96 422 118 1352 1113 1295 1146 587 1330 1094 1356 575 724 90 196 766 481 657 79 219 548 392 157 120 678 672 1326 17 1065 704 583 52 589 1378 365 321 1305 463 668 1323 1331 1036 572 278 753 328 1046 1197 846 724 1170 1153 1154 980 614 335 1072 1221 810 129 521 227 723 1043 407 990 1030 239 814 1034 1287 546 759 1327 1140 1142 442 1135 656 1182 744 240 186 1024 274 1185 1226 744 1154 338 24 216 789 285 638 631 1125 945 1025 226 1026 138 1308 504 102 91 619 1186 891 259 982 336 1245 1280 657 243 417 1336 1281 222 95 1010 768 534 778 1033 876 1309 1289 519 1248 1199 39 169 248 207 416 1377 312 1261 96 1143 1289 709 211 1099 904 389 69 1126 784 662 279 94 1318 856 845 670 791 528 629 689 782 574 13 1152 393 1118 53 750 932 827 131 116 248 505 1059 300 91 1309 373 530 1216 310 652 75 1335 1221 273 285 404 511 417 95 443 1134 253 399 115 517 269 1307 1287 1337 875 536 985 692 252 552 1 1280 1043 1066 123 233 1351 858 216 307 1083 293 866 441 1287 633 615 1197 1365 1006 1259 1230 281 718 875 26 770 929 626 765 1132 1086 139 567 1171 766
89 对应输出应该为:
90 622
91 你的输出为:
92 6221868*/

  

时间: 2024-11-05 22:52:03

32:合唱队的相关文章

1996: [Hnoi2010]chorus 合唱队

1996: [Hnoi2010]chorus 合唱队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1057  Solved: 681[Submit][Status][Discuss] Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Source 题解:萌萌哒DP题,其实和我一开始想的暴力方法很接近,基本上就是记忆化暴力,然后转变为循环形

【BZOJ1996】【HNOI2010】合唱队 [区间DP]

合唱队 Time Limit: 4 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Main idea 给定一个元素两两不相等的目标序列,每次按照给定方式将一个元素加入到序列当中,问得到目标序列的方案有几种.(加元素的方式:如果加的这个元素比上一个加入的元素小的话则放在队头,否则放在队

Hadoop:Windows 7 32 Bit 编译与运行

所需工具 1.Windows 7 32 Bit OS(你懂的) 2.Apache Hadoop 2.2.0-bin(hadoop-2.2.0.tar.gz) 3.Apache Hadoop 2.2.0-src(hadoop-2.2.0-src.tar.gz) 3.JDK 1.7 4.Maven 3.2.1(apache-maven-3.2.1-bin.zip) 5.Protocol Buffers 2.5.0 6.Unix command-line tool Cygwin(Setup-x86.e

sql server 2005 32位+64位、企业版+标准版、CD+DVD 下载地址大全

企业版DVD SQL Server 2005 Enterprise Edition(支持超大型企业) 32 位DVD: ed2k://|file|cs_sql_2005_ent_x86_dvd.iso|972310528|4CEEF4B959894FD78C8F8416B4BA533E|/ 64 位DVD: ed2k://|file|cs_sql_2005_ent_x64_dvd.iso|1019222016|10FD11133A3E70DAD665BEDC1090AD28|/ 标准版CD SQ

Linux(Red Hat 6 32位) 下安装Mysql5.6.30

1. 下载MySQL 5.6 下载页面:http://dev.mysql.com/downloads/mysql/ 此处选择"Red Hat Enterprise Linux 6 / Oracle Linux 6 (x86, 32-bit), RPM Bundle"下载,下载至/root/fuxian/目录下,下载文件名为"MySQL-5.6.30-1.el6.i686.rpm-bundle.tar" 2. 解压tar包 cd /fuxian/Downloads/

笔记3-2: read函数

read 函数: 调用read函数可以从打开的文件中读取数据. 原型: #include <unistd.h> ssize_t  read(int filedes, void* buf, size_t nbytes); 返回值:若成功则返回读取到的字节数,文件的偏移量将增加至实际读取的字节数,若到了文件末尾返回0,出错返回-1. 很多情况下,实际读取字节数少于要求的字节数,如下: 1.普通文件,在读取要求的字节数之前,已经到达文件尾端. 2.终端,通常一次最多读取一行.(有办法改变这一行为)

%1不是有效的 win32应用程序(64位转换32位)

phpmyadmin打开时候显示 HTTP500内部服务器错误,用火狐浏览器显示的是%1不是有效的 win32应用程序.谷歌一下,终于找出问题,原来是windows2003 64位的操作系统和32位IIS的问题..最终找到解决方法如下: 要运行 32 位版本的 ASP.NET 2.0,请按照以下步骤操作:1. 单击"开始",单击"运行",键入 cmd,然后单击"确定". 2. 键入以下命令启用 32 位模式: cscript %SYSTEMDRI

关于32位程序的内存

在上大学的时候老师提到过这么一个知识点 32位程序的寻址能力是2^32,也就是4G.对于32位程序只能申请到4G的内存.而且这4G内存中,在windows下有2G,linux下有1G是保留给内核态使用,用户态无法访问.故只能分配2G.3G的内存使用. 前几天服务器报警了,无法负载更多的用户进行访问.赶紧看了下程序的自我评分,显示内存占用达到3.6G,无法继续工作. WTF?3.6G?超过linux下32位程序只能使用3G内存的限制? 这个时候怀疑是评分程序写错了,赶紧用TOP看了下内存,也达到了

在32位、64位操作系统下各数据类型所占的字节数

点击打开链接 在32位.64位系统当中,唯一改变的是指针的长度;在32位系统当中是4个字节.64位则是8个字节.所谓的32位.64位,这个指的是寄存器的位宽. 32位平台下结果: 64位平台下结果: 一.下面几点是值得大家注意的: 1.关于 int 的取值范围,缺省的int数值范围是由编译器设计者决定的,通常都是机器最为自然高效的位数.甚至,我们在32位的机器上,前提没有什么指令可以高效的的处理更短的整型值,我们可以将short.int.long都设置成32位. 2.浮点数在缺省的情况下 表示的