HDU 4597
2024-08-29 08:21:23
题目大意:
两人轮流从两堆牌从抽取最顶端或者最底部的牌,得到的分数加到自己身上,问先拿牌的最多能得多少分
记忆化搜索,2堆牌的底和顶,有四种方法,根据四种方法来找到最优解
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int dp[][][][],p[],q[];
int dfs(int a,int b,int c,int d,int sum)
{
int maxn=;
if(a>b&&c>d) return ;
if(dp[a][b][c][d]) return dp[a][b][c][d];
if(a<=b){
maxn=max(maxn,sum-dfs(a+,b,c,d,sum-p[a]));
maxn=max(maxn,sum-dfs(a,b-,c,d,sum-p[b]));
}
if(c<=d){
maxn=max(maxn,sum-dfs(a,b,c+,d,sum-q[c]));
maxn=max(maxn,sum-dfs(a,b,c,d-,sum-q[d]));
}
dp[a][b][c][d]=maxn;
return maxn;
}
int main()
{
int T,n,sum;
scanf("%d",&T);
while(T--){
sum=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&p[i]);
sum+=p[i];
}
for(int i=;i<=n;i++){
scanf("%d",&q[i]);
sum+=q[i];
}
memset(dp,,sizeof(dp));
int ans=dfs(,n,,n,sum);
printf("%d\n",ans);
}
return ;
}
最新文章
- C语言关键字详解
- Nginx 缓存参数
- Oracle数据库中实现mysql数据库中auto-increment功能
- VB调用控制面板
- CUICatalog: Invalid asset name supplied: (null)
- S3C2440硬件连接解析
- Java面试13|算法
- C语言之for循环
- Eclipse集成Android_NDK
- day25 Python __setattr__
- 牛客第三场多校 H Diff-prime Pairs
- MongoDB-管道与聚合(3)
- js jquery 函数回调
- macOS 安装 pcl 1.8.0
- $.cookie is not a function;原因及解决办法
- $.ajax 的速度要快于 angular 里 $http (个别情况)
- MyBatis 学习记录3 MapperMethod类
- 代码质量检测-Sonar
- UEditor 中配置可以跨域访问的图片路径
- C Program基础-宏定义