UVA 10891 Game of Sum (区间DP)
2015-07-16 17:52
316 查看
题意:有n个数,两个玩家A、B,每个玩家在他那一轮可以从左端或右端取连续的一段数,把数的和加到自己的分数上,假设每个玩家都采取尽可能的让自己的分数更高,那么A玩家最后和B玩家分数的差为多少(A玩家先手)
思路:
设dp[i][j][0]为自己先手在区间i到j内最后获得的最多的分数
dp[i][j][1] 为对方先手在区间i到j内最后获得的最多的分数
那么状态转移方程:
dp[i][j][0] = max(dp[i][j][0],max(sum[k] - sum[i-1] + dp[k+1][j][1],sum[j] - sum[k-1] + dp[i][k-1][1]));
dp[i][j][1] = min(dp[i][j][1],min(dp[k+1][j][0],dp[i][k-1][0]));
最后结果为dp[0][n-1][0] - dp[0][n-1][1].
我的代码:
思路:
设dp[i][j][0]为自己先手在区间i到j内最后获得的最多的分数
dp[i][j][1] 为对方先手在区间i到j内最后获得的最多的分数
那么状态转移方程:
dp[i][j][0] = max(dp[i][j][0],max(sum[k] - sum[i-1] + dp[k+1][j][1],sum[j] - sum[k-1] + dp[i][k-1][1]));
dp[i][j][1] = min(dp[i][j][1],min(dp[k+1][j][0],dp[i][k-1][0]));
最后结果为dp[0][n-1][0] - dp[0][n-1][1].
我的代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int maxn = 105; const int INF = 0x3f3f3f3f; int n,a[maxn],sum[maxn]; int dp[maxn][maxn][2]; int main(){ while(~scanf("%d",&n)){ if(n == 0) break; memset(dp,0,sizeof(dp)); memset(sum,0,sizeof(sum)); for(int i = 0 ; i < n ; i++){ scanf("%d",&a[i]); for(int j = 0 ; j <= i ; j++) sum[i] += a[j]; } for(int i = n - 1 ;i >= 0 ; i--){ for(int j = i ; j < n ; j++){ dp[i][j][0] = -INF ; dp[i][j][1] = INF; if(i == j){ dp[i][j][0] = a[i]; dp[i][j][1] = 0; continue; } for(int k = i ; k <= j ; k++){ if(i == 0 && k == 0){ dp[i][j][0] = max(dp[i][j][0],max(sum[k] + dp[k+1][j][1],sum[j])); dp[i][j][1] = min(dp[i][j][1],min(dp[k+1][j][0],0)); }else if(i == 0){ dp[i][j][0] = max(dp[i][j][0],max(sum[k] + dp[k+1][j][1],sum[j] - sum[k-1] + dp[i][k-1][1])); dp[i][j][1] = min(dp[i][j][1],min(dp[k+1][j][0],dp[i][k-1][0])); }else{ dp[i][j][0] = max(dp[i][j][0],max(sum[k] - sum[i-1] + dp[k+1][j][1],sum[j] - sum[k-1] + dp[i][k-1][1])); dp[i][j][1] = min(dp[i][j][1],min(dp[k+1][j][0],dp[i][k-1][0])); } } } } printf("%d\n",dp[0][n-1][0] - dp[0][n-1][1]); } return 0; }
相关文章推荐
- Maven实战(七)常用Maven插件介绍(上)
- Maven实战(六)Gradle,构建工具的未来?
- php excel文件导出之二 图像导出
- IntentService源码分析
- CocoaPods did not set the base configuration of your project 问题解决方案
- mybatis入门基础(三)----SqlMapConfig.xml全局配置文件解析------------转载
- 转: 如何成为一个通晓多种编程语言的程序员
- 一直都不是一个人:我有同路人
- Maven实战(五)自动化Web应用集成测试
- 嵌入式系统基础知识------之嵌入式系统的定义和组成(1.1)
- 021.Ternary Operator 三目运算
- match in shell scripts
- Q_PROPERTY
- 基础收录(2)--同步和异步
- Maven实战(四)基于Maven的持续集成实践
- eclipse里,android项目下如何attach source
- QT POST/GET 发送/获取网页数据
- AndroidStudio错误local path doesn't exist解决办法
- Android 触摸屏幕产生小气泡的效果源码
- Maven实战(三)多模块项目的POM重构