USACO 3.4 Raucous Rockers

TASK: rockers
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 3080 KB]
   Test 2: TEST OK [0.000 secs, 3080 KB]
   Test 3: TEST OK [0.000 secs, 3080 KB]
   Test 4: TEST OK [0.000 secs, 3080 KB]
   Test 5: TEST OK [0.000 secs, 3080 KB]
   Test 6: TEST OK [0.000 secs, 3080 KB]
   Test 7: TEST OK [0.000 secs, 3080 KB]
   Test 8: TEST OK [0.000 secs, 3080 KB]
   Test 9: TEST OK [0.000 secs, 3080 KB]
   Test 10: TEST OK [0.000 secs, 3080 KB]
   Test 11: TEST OK [0.000 secs, 3080 KB]
   Test 12: TEST OK [0.000 secs, 3080 KB]

All tests OK.

1 /*
2 PROG: rockers
3 ID: jiafeim1
4 LANG: C++
5  */
6
7 #include <stdio.h>
8 #include <string.h>
9 #include <math.h>
10
11  #define maxX(x,y) ((x)>(y)?(x):(y))
12
13 int n,t,m;
14 int musicLen[25];
15 bool musicHaveChoose[25]={false};
16
17 int res[25][25][25]={0};
18
19 int main()
20 {
21 FILE *fin = fopen("rockers.in", "r");
22 FILE *fout = fopen("rockers.out", "w");
23
24 fscanf(fin,"%d%d%d",&n,&t,&m);
25 for(int i = 0;i<n;++i)
26 {
27 fscanf(fin,"%d",&(musicLen[i]));
28 if(musicLen[i]>t)
29 musicHaveChoose[i]=true;
30 }
31 int c1,c2,c3;
32 for(int music = 1;music<=n;++music)
33 if(musicHaveChoose[music-1])
34 continue;
35 else
36 for(int cd = 1;cd<=m;++cd)
37 for(int len = 1;len <=t;++len)
38 {
39 c1 = res[cd][music-1][len];
40 c3 = res[cd-1][music][t];
41 c2 = 0;
42 if(len > musicLen[music-1])
43 c2 = res[cd][music-1][len-musicLen[music-1]]+1;
44 if(len == musicLen[music-1])
45 c2 = res[cd-1][music-1][t]+1;
46 res[cd][music][len]=
47 maxX(maxX(c1,res[cd][music][len]),maxX(c2,c3));
48 }
49 fprintf(fout,"%d\n",res[m][n][t]);
50 fclose(fin);
51 fclose(fout);
52 return 0;
53 }
posted @ 2011-05-31 23:29  幻魇  阅读(237)  评论(0编辑  收藏  举报