uva10891 - Game of Sum(动归)
来源:互联网 发布:透明显示屏软件下载 编辑:程序博客网 时间:2024/05/21 09:43
状态:dp[i][j]表示从a[i]到a[j]的串中,第一个选取的人所能选出的最大值。
状态转移:dp[i][j] = sum[i....j] - min(dp[i+1][j],dp[i+2][j],dp[i+3][j],dp[i+4][j]....dp[j][j], dp[i][j-1],dp[i][j-1],dp[i][j-3], dp[i][j-4]...dp[i][i], 0);
“0”是代表第一个人把a[i]....a[j]的全取的状态:
代码如下:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 105int n, a[N], dp[N][N], f[N][N], g[N][N], s[N];int main (){ while(scanf("%d",&n),n) { s[0] = 0; memset(dp,0,sizeof(dp)); 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++) dp[i][i] = f[i][i] = g[i][i] = a[i]; for(int l = 1; l < n; l++) for(int i = 1, j = i+l; j <= n; i++, j++) { int m = 0; m = min(m, f[i+1][j]); m = min(m, g[i][j-1]); dp[i][j] = s[j]-s[i-1]-m; f[i][j] = min(dp[i][j],f[i+1][j]); g[i][j] = min(dp[i][j],g[i][j-1]); } printf("%d\n",2*dp[1][n]-s[n]); } return 0;}
- uva10891 - Game of Sum(动归)
- UVA10891- Game of Sum
- uva10891 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] 动态规划
- UVa10891 Game of Sum(dp)
- uva10891 Game of Sum(博弈+区间dp+优化)
- 例题28 UVa10891 Game of Sum(DP)
- uva10891 - Game of Sum(递推,极大极小的思想)
- Uva 10891 Game of Sum(二维动规)
- uva10051 - Tower of Cubes( 简单动归)
- 动归
- Game of Sum
- 10891 - Game of Sum
- 10891 - Game of Sum
- Programmer Study Method
- TeraData常用语法
- DeepLearning(深度学习)原理与实现(四)
- linux系统编程读书笔记 第八章
- 基于tiny210v2编译openwrt
- uva10891 - Game of Sum(动归)
- 移植linux-3.9内核到tiny210v2
- 基于tiny210v2的linux-3.9.6内核驱动移植1:led驱动
- uboot从SD卡烧写内核和文件系统
- 基于tiny210v2的linux-3.9.6内核驱动移植2:按键驱动
- JavaScript 概述
- 基于tiny210v2的linux-3.9.6内核驱动移植3:LCD移植
- 开源个安卓程序:蓝牙遥控智能车程序-单片机控制安卓上位机
- 移植opencv-2.4.6到tiny210v2