【UVA】10891 Game of Sum(区间dp)
题目
传送门:QWQ
分析
大力dp。用dp[i][j]表示[i,j]A能得到的最高分
我看到博弈论就怂。。。
代码
#include <bits/stdc++.h> using namespace std; const int maxn=110; int S[maxn],A[maxn],vis[maxn][maxn],n,d[maxn][maxn]; 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) && 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)); printf("%d\n",2*dp(1,n)-S[n]); } return 0; }
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步