P1541 乌龟棋 题解(洛谷,动态规划递推)
题目: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 乌龟棋 题解(洛谷,动态规划递推)相关推荐
- P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...
- 题解 洛谷P1365 WJMZBMR打osu! / Easy
题解 洛谷P1365 WJMZBMR打osu! / Easy Date 2019.7.28 题目大意 给出一个长度为n的由o,x,?组成的字符串,对于每连续的a个o,就有a2分.同时,对于任意的?,有 ...
- 【每日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张牌 思路 ...
- 矩阵压缩降维动态规划递推【P1719 最大加权矩形】
矩阵压缩&降维&动态规划&递推[P1719 最大加权矩形] 题目描述 为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要 ...
- P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)
题目链接:点击进入 题目分析: 简单的组合背包模板题,但是递推的同时要刷新这种情况使用了哪些物品 ac代码: #include<bits/stdc++.h> using namespace ...
- codevs1068 乌龟棋 题解
题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一 的起点,第N格是终点,游戏要求玩家控制 ...
- 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 ...
- 题解 洛谷P4473 【[国家集训队]飞飞侠】
这道题今天我们考试考到了,第三题,最后只剩半小时了,随便打了个暴搜,最后竟然还没调完QAQ,我竟然连暴力都不会打了 咳咳,不扯了,下面开始说这道题的做法 由于N和M都不大于150最容易想到的是Floy ...
- 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏
洛谷P4042[AHOI2014/JSOI2014]骑士游戏\color{#00F}{洛谷\ P4042\ [AHOI2014/JSOI2014]骑士游戏}洛谷 P4042 [AHOI2014/JSO ...
最新文章
- java设置可信任站点_通过网页修改activex安全设置,添加信任站点,禁用弹出窗口阻止程序...
- 改变vim注释的颜色
- 使用MySQL验证Open***用户登录访问
- mvc ajax提交多选,javascript – 如何使用Jquery AJAX调用MVC Action然后在MVC中提交表单?...
- C语言【将一个文本文件中的全部信息显示到屏幕上】
- CRM Fiori Launchpad初次登陆后返回的service metadata信息
- python 自动点击上传以后上传文件,python使用selenium模拟点击网页实现自动导入上传文件功能...
- Maven学习总结(4)——Maven核心概念
- 1064. Complete Binary Search Tree
- corspost请求失败_利用CORS实现POST方式跨域请求数据
- 读书书签-《高等应用数学问题的MATLAB求解》第三版,薛定宇 陈阳泉著
- 办公室计算机应用简单知识,新入职办公室人员基础电脑操作知识.doc
- Excel数据分析和建模
- OMRON-FINS(TCP)协议详细解析和攻击
- wps表格l制作甘特图_十分钟学会制作Excel甘特图,工作进度一目了然!
- php模板页文件在,thinkphp 使每一个模板页都包括一个header文件和一个footer文件
- springboot+elasticsearch 中测试查询语句报错failed to map source
- 大数据求交集和并集处理
- Recorder Point Guideline
- 分享网页微信防撤回插件