链接:https://www.nowcoder.com/acm/contest/130/B
来源:牛客网

题目描述

黑妹和黑弟又聚在一起玩游戏了,这次他们选择在一个n*m的棋盘上玩游戏,棋盘上的每个方格都有一个非负的分数,
游戏从左上角开始右下角结束,双方交替的选择一个方格并获得方格上相应的分数,一方选择的方格必须在上一步另一方选择的方格
的右边或者下面,黑妹先开始。现在黑妹想知道,如果双方都采取最优策略(最优策略是指双方都希望最终自己的总分数减去对方的总分数最大),她的总分数减去黑弟的总分数会是多少?

输入描述:

第一行一个整数T表示数据的组数。(1 ≤ T ≤ 20)
对于每组数据:
第一行两个整数n,m表示棋盘的规格。(1 ≤ n, m ≤ 500)
接下来n行每行m个整数aij表示方格对应的分数。()

输出描述:

对于每组数据输出一行表示答案。

可以推出对于当前格子(i, j),如果i+j为偶数就一定轮到黑弟,i+j为奇数就一定轮到黑妹

所以可以设dp[i][j]表示黑妹分数-黑弟分数的最大值

假设当前轮到黑妹,那么决策就为:如果往右移能使分数差更大就往右移,往下移能使分数差更大就往下移

那么有转移方程:dp[i][j] = max(dp[i+1][j], dp[i][j+1])-a[i][j];

同理轮到黑弟有:dp[i][j] = min(dp[i+1][j], dp[i][j+1])+a[i][j];

dp的话边界处理比较麻烦,建议记忆化搜索

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define LL long long
LL dp[505][505], a[505][505];
int main(void)
{LL T, i, j, n, m;scanf("%lld", &T);while(T--){scanf("%lld%lld", &n, &m);for(i=1;i<=n;i++){for(j=1;j<=m;j++)scanf("%lld", &a[i][j]);}for(i=n;i>=1;i--){for(j=m;j>=1;j--){if(i==n && j==m){if((i+j)%2==0)dp[i][j] = a[i][j];elsedp[i][j] = -a[i][j];}else if(i==n){if((i+j)%2==0)dp[i][j] = dp[i][j+1]+a[i][j];elsedp[i][j] = dp[i][j+1]-a[i][j];}else if(j==m){if((i+j)%2==0)dp[i][j] = dp[i+1][j]+a[i][j];elsedp[i][j] = dp[i+1][j]-a[i][j];}else{if((i+j)%2==0)dp[i][j] = min(dp[i+1][j], dp[i][j+1])+a[i][j];elsedp[i][j] = max(dp[i+1][j], dp[i][j+1])-a[i][j];}}}printf("%lld\n", dp[1][1]);}return 0;
}

牛客练习赛21:B. 黑妹的游戏II(博弈DP)相关推荐

  1. 牛客练习赛21:A. 黑妹的游戏I

    链接:https://www.nowcoder.com/acm/contest/130/A 来源:牛客网 题目描述 黑妹最近在玩一个有趣的游戏,游戏规则是这样的: 刚开始黑板上有三个不同的初始数字,然 ...

  2. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  3. 牛客练习赛63 F.牛牛的树行棋(博弈 SG函数)

    题目链接:https://ac.nowcoder.com/acm/contest/5531/F 牛牛的树行棋 前置知识 思路 代码 前置知识 这道题目需要博弈论中的SG函数的知识,这里就不多赘述.主要 ...

  4. 2021牛客练习赛90

    2021牛客练习赛90 B.寒冬信使 C.盾与战锤 B.寒冬信使 题目链接:https://ac.nowcoder.com/acm/contest/11180/B code: #include< ...

  5. 牛客练习赛58 C.矩阵消除游戏

    牛客练习赛58 C.矩阵消除游戏 题目链接 题目描述 牛妹在玩一个名为矩阵消除的游戏,矩阵的大小是n行m列,第i行第j列的单元格的权值为ai,ja_{i,j}ai,j​ ,牛妹可以进行k个回合的游戏, ...

  6. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  7. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  8. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  9. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

最新文章

  1. OC和JS互相调用小框架
  2. java线程实现方式
  3. python土木_土木和结构工程师用Python-Python for civil and structural engineers
  4. 46 FI配置-财务会计-固定资产-一般评估-指定平行货币的使用
  5. 每个Linux用户都应该了解的命令行省时技巧
  6. 火星上首座虚拟房屋以超过50万美元价格售出
  7. 操作数据----DML语句
  8. 音频、视频等文件格式(.ts、.meta)及其认识
  9. 两台windows笔记本创建家庭组实现文件共享
  10. 别样的唐诗宋词汇——基于Python的量化分析挖掘尝试
  11. word批量转换为pdf python脚本
  12. java实现即时通讯_java实现WebSocket即时通信
  13. 普通代码签名证书和EV代码签名证书的区别
  14. 帝国霸业服务器无限加载,帝国霸业银河生存1.0正式版开局生存流程指南
  15. 网站搜索功能lucene
  16. HMM详细讲解与代码的实现
  17. infra-structure Ad Hoc
  18. 【5G核心网】5G概念之-MICO Mode
  19. java 控制器的类型和作用,跳转页面的方式
  20. 电视剧《猎毒人》观后感

热门文章

  1. python怎么读写文件-python怎么读取文件内容
  2. python零基础能学吗-python 零基础该怎么学?
  3. python编程入门-Python编程入门经典pdf(Python编程入门教程) 高清中文版
  4. python基础教程代码-Python基础教程代码怎么是英文 看不懂啊?
  5. 长虹智慧厨房解决方案,让你AI上智慧家居生活
  6. 移动web-使一个盒子水平垂直居中的六种方法
  7. vue element-ui只有一条信息时默认选中按钮,且不能取消,多条信息时可以手动选择
  8. java md5算法_JAVA实现MD5算法
  9. 单调栈:leetcode 84. 柱状图中最大的矩形/85最大矩形
  10. LeetCode113. 路径总和||