【USACO3.3.5】一个游戏

来源:互联网 发布:什么值得买app源码 编辑:程序博客网 时间:2024/05/29 19:08

程序里有解释


#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std; int n;int a[105], s[105]={0};int f[105][105];  /*f[i][j] 面对[i,j]的区间, 所能取得的最大值  显然后面对的,能取得的值就是s[j]-s[i - 1] - f[i][j] f[i][j] 过后肯定是 f[i +1][j]    f[i][j - 1]的局势 所以f[i][j] = max(s[j] - s[i] - f[i + 1][j] + a[i], s[j - 1] - s[i - 1] - f[i][j - 1] + a[j]);f[i][i] = a[i] */ int main(){scanf("%d", &n);for (int i = 1; i <= n; ++ i){scanf("%d", &a[i]);       s[i] = s[i-1] + a[i];  f[i][i] = a[i];}for (int k = 1; k != n ; ++ k)for (int i = 1; i + k <= n; ++ i){int j = i + k;f[i][j] = max(s[j] - s[i] - f[i + 1][j] + a[i], s[j - 1] - s[i - 1] - f[i][j - 1] + a[j]);}printf("%d %d\n", f[1][n], s[n] - f[1][n]);return 0;}/*6 4 7 2 9 5 2*/


0 0
原创粉丝点击