2 1 23 53 3 10 100 20 2 4 3
53 105dp[la][ra][lb][rb]记录的是在a的区间只剩下la~ra,b的区间只剩下lb~rb的时候,Alice能得到的最大值那么只需要考虑四种不同的取法并从中取得最优的方案,sum-(Alice上一个状态中Bob拿的值)中取最大#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int n,dp[23][23][23][23],a[23],b[23]; int dfs(int la,int ra,int lb,int rb,int sum) { int maxn = 0; if(la>ra && lb>rb) return 0; if(dp[la][lb][ra][rb]) return dp[la][lb][ra][rb]; if(la<=ra) { maxn = max(maxn,sum-dfs(la+1,ra,lb,rb,sum-a[la])); maxn = max(maxn,sum-dfs(la,ra-1,lb,rb,sum-a[ra])); } if(lb<=rb) { maxn = max(maxn,sum-dfs(la,ra,lb+1,rb,sum-b[lb])); maxn = max(maxn,sum-dfs(la,ra,lb,rb-1,sum-b[rb])); } dp[la][lb][ra][rb] = maxn; return maxn; } int main() { int t,i,j,sum; scanf("%d",&t); while(t--) { sum = 0; scanf("%d",&n); for(i = 1;i<=n;i++) { scanf("%d",&a[i]); sum+=a[i]; } for(i = 1;i<=n;i++) { scanf("%d",&b[i]); sum+=b[i]; } memset(dp,0,sizeof(dp)); printf("%d\n",dfs(1,n,1,n,sum)); } return 0; }
HDU4597:Play Game(记忆化),布布扣,bubuko.com
原文地址:http://blog.csdn.net/libin56842/article/details/38232327