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 }