题目:P1541 乌龟棋

感谢大神的题解(他的写的特别好)

写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...)

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll num[350+100];
ll p[5];
ll f[41][41][41][41];
int main()
{ios::sync_with_stdio(false);ll n,m;//n格子数,m牌数cin>>n>>m;for(ll i=1;i<=n;i++)cin>>num[i];ll x;for(ll i=1;i<=m;i++)cin>>x,p[x]++;//偷懒用逗号隔开
f[0][0][0][0]=num[1];for(ll a=0;a<=p[1];a++)for(ll b=0;b<=p[2];b++)for(ll c=0;c<=p[3];c++)for(ll d=0;d<=p[4];d++){ll r=1+1*a+2*b+3*c+4*d;if(a>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a-1][b][c][d]+num[r]);//如果有牌出if(b>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a][b-1][c][d]+num[r]);if(c>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c-1][d]+num[r]);if(d>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c][d-1]+num[r]);}cout<<f[p[1]][p[2]][p[3]][p[4]]<<endl;
}

点击加号展开代码

思路:

每个牌有四种,建立一个四维数组f[a][b][c][d]表示当现在使用了a张走一位牌,b...,c...,d张走四位牌后能获得的最大数字

然后输入数据的时候准备一个数组p[5],把a,b,c,d牌数量分别放入1,2,3,4位

然后

for(a=0~p[1])for(b=0~p[2])for(b=0~p[3])for(b=0~p[4])//表示遍历a,b,c,d全部情况,我们要的是答案f[p[1]][p[2]][p[3]][p[4]]

所以要想办法递推到f[p[1]][p[2]][p[3]][p[4]]

用4个max,计算每一次的最大f[a][b][c][d],

那个递推式中:

ll r=1+1*a+2*b+3*c+4*d;//r表示当前的位置,+1是,比如说a=b=c=d=0,但是他是在第一位,所以初始位是1
if(a>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a-1][b][c][d]+num[r]);//如果有牌出
if(b>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a][b-1][c][d]+num[r]);
if(c>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c-1][d]+num[r]);
if(d>=1) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c][d-1]+num[r]);

中,a>=1是判断是否可以出牌

对于f[a-1][b][c][d]+num[r]的意思就是如果更新出了a牌之后的的数字总数,f[a][b][c][d]就是不出牌的数字总数,其实就是不变

转载于:https://www.cnblogs.com/zyacmer/p/9977084.html

P1541 乌龟棋 题解(洛谷,动态规划递推)相关推荐

  1. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)

    先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...

  2. 题解 洛谷P1365 WJMZBMR打osu! / Easy

    题解 洛谷P1365 WJMZBMR打osu! / Easy Date 2019.7.28 题目大意 给出一个长度为n的由o,x,?组成的字符串,对于每连续的a个o,就有a2分.同时,对于任意的?,有 ...

  3. 【每日DP】day6 P1541 乌龟棋(四维DP)难度⭐⭐⭐

    P1541 乌龟棋 四维DP--四种状态,所以四维DP f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]:表示牌号分别为1,2,3,4,的时候用了i,j,k,l张牌 思路 ...

  4. 矩阵压缩降维动态规划递推【P1719 最大加权矩形】

    矩阵压缩&降维&动态规划&递推[P1719 最大加权矩形] 题目描述 为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要 ...

  5. P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)

    题目链接:点击进入 题目分析: 简单的组合背包模板题,但是递推的同时要刷新这种情况使用了哪些物品 ac代码: #include<bits/stdc++.h> using namespace ...

  6. codevs1068 乌龟棋 题解

    题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一 的起点,第N格是终点,游戏要求玩家控制 ...

  7. python刷题 NOI题库 python题解 洛谷、牛客网、AcWing 刷题等

    NOI题库 python题解-2022.01.07整理(1.1-1.3) NOI题库 python题解-2022.01.07整理(1.1-1.3)_dllglvzhenfeng的博客-CSDN博客 N ...

  8. 题解 洛谷P4473 【[国家集训队]飞飞侠】

    这道题今天我们考试考到了,第三题,最后只剩半小时了,随便打了个暴搜,最后竟然还没调完QAQ,我竟然连暴力都不会打了 咳咳,不扯了,下面开始说这道题的做法 由于N和M都不大于150最容易想到的是Floy ...

  9. 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏

    洛谷P4042[AHOI2014/JSOI2014]骑士游戏\color{#00F}{洛谷\ P4042\ [AHOI2014/JSOI2014]骑士游戏}洛谷 P4042 [AHOI2014/JSO ...

最新文章

  1. java设置可信任站点_通过网页修改activex安全设置,添加信任站点,禁用弹出窗口阻止程序...
  2. 改变vim注释的颜色
  3. 使用MySQL验证Open***用户登录访问
  4. mvc ajax提交多选,javascript – 如何使用Jquery AJAX调用MVC Action然后在MVC中提交表单?...
  5. C语言【将一个文本文件中的全部信息显示到屏幕上】
  6. CRM Fiori Launchpad初次登陆后返回的service metadata信息
  7. python 自动点击上传以后上传文件,python使用selenium模拟点击网页实现自动导入上传文件功能...
  8. Maven学习总结(4)——Maven核心概念
  9. 1064. Complete Binary Search Tree
  10. corspost请求失败_利用CORS实现POST方式跨域请求数据
  11. 读书书签-《高等应用数学问题的MATLAB求解》第三版,薛定宇 陈阳泉著
  12. 办公室计算机应用简单知识,新入职办公室人员基础电脑操作知识.doc
  13. Excel数据分析和建模
  14. OMRON-FINS(TCP)协议详细解析和攻击
  15. wps表格l制作甘特图_十分钟学会制作Excel甘特图,工作进度一目了然!
  16. php模板页文件在,thinkphp 使每一个模板页都包括一个header文件和一个footer文件
  17. springboot+elasticsearch 中测试查询语句报错failed to map source
  18. 大数据求交集和并集处理
  19. Recorder Point Guideline
  20. 分享网页微信防撤回插件

热门文章

  1. ios app 砸壳
  2. linux平台下防火墙iptables原理(转)
  3. Git使用笔记(一)
  4. ORB-SLAM论文翻译
  5. ubuntu18安装virtualbox
  6. ASP.NET图象处理详解
  7. Spring源码分析【8】-分布式环境SpringSecurity保持用户会话
  8. C++中关键字volatile和mutable用法
  9. python多进程原理_python多进程的详细介绍(附示例)
  10. sql2005配置文件服务器,SQL server服务器版的安装方法