USACO Section 3.3 A Game - DP而已~
2012-01-04 10:32
239 查看
![](http://hi.csdn.net/attachment/201201/4/0_1325644329M85u.gif)
这道题算是USACO3.3里最水的一道了~~~1A啊~~思维也很简单~~从长度为1的一直推到长度为n的...
要更新长度为k的(l,r)的两人分数..首先看当前状态时谁来取..这里就和总个数做个差看下奇偶就可以了...具体更新到什么值就看(l+1,r)+data[l]与(l,r-1)+data[r]哪个更优~~
注意的是在更新时~~当前长度没更新的那个人的分数也要跟着传递~~
Program:
/* ID: zzyzzy12 LANG: C++ TASK: game1 */ #include<iostream> #include<istream> #include<stdio.h> #include<string.h> #include<math.h> #include<stack> #include<algorithm> #include<queue> #define oo 1000000000 #define ll long long using namespace std; int n,i,k,a[205],dp[205][205][2]; int main() { freopen("game1.in","r",stdin); freopen("game1.out","w",stdout); scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); for (i=1;i<=n;i++) dp[i][i][(n-1)%2]=a[i]; int x,y; for (k=1;k<n;k++) for (x=1;x<=n-k;x++) { y=x+k; i=(n-k-1)%2; dp[x][y][i]=dp[x+1][y][i]+a[x]; dp[x][y][1-i]=dp[x+1][y][1-i]; if (dp[x][y][i]<dp[x][y-1][i]+a[y]) { dp[x][y][i]=dp[x][y-1][i]+a[y]; dp[x][y][1-i]=dp[x][y-1][1-i]; } } printf("%d %d\n",dp[1] [0],dp[1] [1]); return 0; }
相关文章推荐
- USACO section 3.3 A Game(DP)
- USACO-Section 3.3 A Game (区间DP)
- USACO section 3.3 A Game(DP)
- A Game_usaco3.3_DP
- USACO Training3.3 A Game【区间Dp】 By cellur925
- USACO 3.3 A Game(DP)
- USACO Section 3.3 Shopping Offers(dp)
- A Game USACO 3.3 (DP阵亡)
- USACO Section 3.3 A Game
- USACO Section 3.3 A Game(dp)
- USACO-Section 3.3 Home on the Range (树状数组||DP)
- USACO Section 2.3 Cow Pedigrees - DP状态还是很好找的.
- USACO Section 1.5 Number Triangles (dp)
- USACO Section 3.2 Stringsobits(dp)
- 【hihocoder 1388】【区间DP】A Game【给出一个数列,两人每次从数列的头尾取数,小ho 先取,小hi每次都采取最优策略,问小ho最终能取得的数的总和最大是多少】
- USACO Section 3.3 Home on the Range(dp)
- USACO--3.3Home on the Range+DP
- P2734 游戏 A Game(DP问题)
- USACO 3.3 A Game (game1)
- USACO section 3.3 Shopping Offers(DP或最短路)