【NEFU 1325】宋哥的游戏

题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1325

这道题我一开始不会做,然后看题解也不会,差不多一周后,今天一看懂了

这是一颗树,一个节点有三个子节点,然后要求出根节点的最大值

从叶子节点开始回溯,根节点的值就出来了

然后比较一下就可以得到答案

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define INF 0x3f3f3f3fusing namespace std;const int maxn=10005;int dp[maxn][200],a[maxn],sum[maxn];int main()
{int t;scanf("%d",&t);string str;string pk[14]={"","A","2","3","4","5","6","7","8","9","10","J","Q","K"};for(int k=1;k<=t;k++){int n;scanf("%d",&n);for(int i=1;i<=n;i++){cin>>str;for(int j=1;j<=13;j++){if(str==pk[j]){a[i]=j;}}}sum[n+1]=0;for(int i=n;i>=1;i--){sum[i]=sum[i+1]+a[i];}memset(dp,0,sizeof(dp));for(int i=n;i>=1;i--){for(int j=1;j<150;j++){dp[i][j]=sum[i]-max(dp[i+j][j],max(dp[i+j][j-1],dp[i+j][j+1]));}}if(2*dp[1][1]>sum[1])printf("Case #%d: Song\n",k);if(2*dp[1][1]==sum[1])printf("Case #%d: Again\n",k);if(2*dp[1][1]

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部