UVA10891[Game of Sum] 动态规划
来源:互联网 发布:淘宝怎么找不到高仿表 编辑:程序博客网 时间:2024/06/07 12:12
题目链接
题目大意:两个玩家A和B在玩一个取石子游戏,且每个石子都有它们各自的价值。在游戏中有这样一个规则:每次取一个石子或者连续几个都必从两端取,要么是最左端,要么是最右端,直到取完为止。两个玩家都非常聪明,他们每次都会去最优的结果。给他们N个石子,你能计算出玩家A,B各自的最后结果吗?假设总是玩家A先开局。
解题报告:
dp[i][j] 表示对方剩下的序列为原序列的i~j子序列。
dp[i][j]=sum[i][j]-min{d[i+1][j],d[i+2][j]…,d[j][j],…,d[i][j-1]+d[i][i],0}
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 100 + 10;int S[N], A[N], d[N][N], vis[N][N], n;int dp(int i, int j){ if( vis[i][j] ) return d[i][j]; vis[i][j]=1; int m=0; for ( int k=i+1; k<=j; k++ ) m=min( m, dp(k,j) ); for ( int k=i; k<j; k++ ) m=min( m, dp(i,k) ); d[i][j]=S[j]-S[i-1]-m; return d[i][j];} int main(){ while( scanf("%d", &n)==1 && n ){ S[0]=0; for ( int i=1; i<=n; i++ ) scanf("%d", &A[i] ), S[i]=S[i-1]+A[i]; memset(vis,0,sizeof(vis)); dp(1,n); printf("%d\n", 2*d[1][n]-S[n] ); } return 0;}
f[i][j]=min(dp[i[j],f[i+1][j])
g[i][j]=min(dp[i][j],f[i][j-1])
d[i][j]=sum(i,j)-min(f[i+1][j],g[i][j-1],0)
#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int N = 110;int S[N], A[N], d[N][N], f[N][N], g[N][N];int main(){ int n; while( scanf("%d", &n )==1 && n ){ S[0]=0; for ( int i=1; i<=n; i++ ) scanf("%d", &A[i] ), S[i]=S[i-1]+A[i]; for ( int i=1; i<=n; i++ ) d[i][i]=f[i][i]=g[i][i]=A[i]; for ( int L=1; L<n; L++ ) for ( int i=1; i+L<=n; i++ ){ int j=i+L; int m=0; m=min(m, f[i+1][j]); m=min(m, g[i][j-1]); d[i][j]=S[j]-S[i-1]-m; f[i][j]=min(d[i][j], f[i+1][j]); g[i][j]=min(d[i][j], g[i][j-1]); } printf("%d\n", 2*d[1][n]-S[n] ); } return 0;}
阅读全文
0 0
- UVA10891[Game of Sum] 动态规划
- UVA10891- Game of Sum
- uva10891 Game of Sum
- uva10891 - Game of Sum
- Game of Sum(动态规划)
- uva10891 - Game of Sum(动归)
- uva10891 Game of Sum 博弈区间dp
- UVA10891 Game of Sum(区间DP+思路)
- UVA10891 Game of Sum(区间DP)
- UVa10891 Game of Sum(dp)
- UVA 10891 Game of Sum (动态规划)
- uva10891 Game of Sum(博弈+区间dp+优化)
- 例题28 UVa10891 Game of Sum(DP)
- 动态规划--UVa10891
- [动态规划] Sum游戏 ( Game of Sum, Uva 10891 )
- uva 10891 - Game of Sum 动态规划 状态选取
- uva10891 - Game of Sum(递推,极大极小的思想)
- sum游戏 Game of sum uva 10891 动态规划 备忘录(记忆化搜索)
- 测试人员例会会议议题制定规范
- 初学素数筛选打表法
- 方法——猜字母小游戏
- java学习内容
- openwrt中boot_hook函数的一些说明
- UVA10891[Game of Sum] 动态规划
- Go 使用protobuf
- GYM 100488 Two Pirates(想法)
- 面试题---day02
- 牛客 题库 memcpy memmove memset strcpy
- 多条目加载,HttpURLConnection,get模型
- 新XListView连接网络请求数据
- matlab2c使用c++实现matlab函数系列教程-randint函数
- 除了alert,其他提示