USACO 3.3 A Game

TASK: game1
LANG: C++

Compiling...
Compile: OK

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

All tests OK.

1 /*
2 PROG: game1
3 ID: jiafeim1
4 LANG: C++
5  */
6
7 #include <stdio.h>
8 #include <string.h>
9
10 #define maxX(x,y) ((x)>(y)?(x):(y))
11 int get[205][205];
12 int subsum[205][205];
13 int num[205];
14 int n;
15 int main()
16 {
17 FILE *fin = fopen("game1.in", "r");
18 FILE *fout = fopen("game1.out", "w");
19
20 fscanf(fin,"%d",&n);
21 int temp;
22 for(int i = 0;i<n;++i)
23 {
24 fscanf(fin,"%d",&temp);
25 num[i]=temp;
26 subsum[i][i]=temp;
27 get[i][i]=temp;
28 }
29 for(int i = 0;i<n-1;++i)
30 {
31 subsum[i][i+1]=subsum[i][i]+num[i+1];
32 get[i][i+1]=maxX(num[i],num[i+1]);
33 }
34 for(int l = 2;l<n;++l)
35 for(int start = 0;start+l<n;++start)
36 {
37 subsum[start][start+l]=subsum[start][start+l-1]+num[start+l];
38 get[start][start+l]=
39 maxX(num[start]+subsum[start+1][start+l]-get[start+1][start+l],
40 num[start+l]+subsum[start][start+l-1]-get[start][start+l-1]);
41 }
42 fprintf(fout,"%d %d\n",get[0][n-1],subsum[0][n-1]-get[0][n-1]);
43
44 fclose(fin);
45 fclose(fout);
46 return 0;
47 }
posted @ 2011-05-28 23:46  幻魇  阅读(207)  评论(0编辑  收藏  举报