【codevs1068】乌龟棋noip10年TG----第二个A掉的钻石题
小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数)。棋盘第1格是唯一 的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。
…… 1 2 3 4 5 ……N 乌龟棋中M张爬行卡片,分成4种不同的类型(M张卡片中不一定包含所有4种类型 的卡片,见样例),每种类型的卡片上分别标有1、2、3、4四个数字之一,表示使用这种卡 片后,乌龟棋子将向前爬行相应的格子数。游戏中,玩家每次需要从所有的爬行卡片中选择 一张之前没有使用过的爬行卡片,控制乌龟棋子前进相应的格子数,每张卡片只能使用一次。 游戏中,乌龟棋子自动获得起点格子的分数,并且在后续的爬行中每到达一个格子,就得到 该格子相应的分数。玩家最终游戏得分就是乌龟棋子从起点到终点过程中到过的所有格子的 分数总和。 很明显,用不同的爬行卡片使用顺序会使得最终游戏的得分不同,小明想要找到一种卡 片使用顺序使得最终游戏得分最多。 现在,告诉你棋盘上每个格子的分数和所有的爬行卡片,你能告诉小明,他最多能得到 多少分吗?
输入的每行中两个数之间用一个空格隔开。 第1行2个正整数N和M,分别表示棋盘格子数和爬行卡片数。 第2行N个非负整数,a1a2……aN
,其中ai表示棋盘第i个格子上的分数。 第3行M个整数,b1b2……bM
,表示M张爬行卡片上的数字。 输入数据保证到达终点时刚好用光M张爬行卡片,即N - 1=∑(1->M) bi
输出一行一个整数
13 8
4 96 10 64 55 13 94 53 5 24 89 8 30
1 1 1 1 1 2 4 1
455
【数据范围】
对于30%的数据有1 ≤ N≤ 30,1 ≤M≤ 12。
对于50%的数据有1 ≤ N≤ 120,1 ≤M≤ 50,且4 种爬行卡片,每种卡片的张数不会超
过20。
对于100%的数据有1 ≤ N≤ 350,1 ≤M≤ 120,且4 种爬行卡片,每种卡片的张数不会
超过40;0 ≤ ai ≤ 100,1 ≤ i ≤ N;1 ≤ bi ≤ 4,1 ≤ i ≤M。输入数据保证N−1=ΣM
i b
1
说实话,当时我做这道题的时候内心是激动\(≧▽≦)/和崩溃%>_<%的,其间我一些SB做法就不提了(一直是在局部最优徘徊→ →),后来在CA神和肖大爷的帮助下,从一维数组改成一个四位数组进行dp,然后就过了。。。就过了。。。
#include<iostream> #include<cstdio> using namespace std; int ff(int a,int b,int c,int d) {return max(max(a,b),max(c,d)); } int a[400],b[4],ans[41][41][41][41];//a数组存储每个格子的价值,b[i]表示能走i步的卡片数量多少,ans的四维分别表示四种卡片的使用,ans[m][n][k][l]用来存储用m张1,n张2,k张3和l张4所获得的最大价值。 main() {int n,m,x;cin>>n>>m;for (int i=1;i<=n;i++) cin>>a[i];for (int i=1;i<=m;i++) {cin>>x;b[x]++;}ans[0][0][0][0]=a[1];//初始为起点价值for (int i=0;i<=b[1];i++)for (int j=0;j<=b[2];j++)for (int k=0;k<=b[3];k++)for (int l=0;l<=b[4];l++){int x1=0,x2=0,x3=0,x4=0;int value=a[i+j*2+k*3+l*4+1];if (i>=1) x1=ans[i-1][j][k][l]+value;if (j>=1) x2=ans[i][j-1][k][l]+value;if (k>=1) x3=ans[i][j][k-1][l]+value;if (l>=1) x4=ans[i][j][k][l-1]+value;ans[i][j][k][l]+=ff(x1,x2,x3,x4);}cout<<ans[b[1]][b[2]][b[3]][b[4]]; }
总结一下做法就是一个个去试,但不同于深搜(dfs),时间复杂度大大减小,但四重循环还是谨慎使用的好,毕竟这个题目每种不大于40;
最多40^4=2560000,爆不了的
【codevs1068】乌龟棋noip10年TG----第二个A掉的钻石题相关推荐
- codevs1068 乌龟棋 题解
题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一 的起点,第N格是终点,游戏要求玩家控制 ...
- P1541 乌龟棋 题解(洛谷,动态规划递推)
题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...
- 【每日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张牌 思路 ...
- 【NOIP2010】【P1317】乌龟棋
似乎很像搜索的DP(应该也可以用搜索写) 原题: 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N 格是终点 ...
- AcWing 312. 乌龟棋
小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘只有一行,该行有 N 个格子,每个格子上一个分数(非负整数). 棋盘第 1 格是唯一的起点,第 N 格是终点,游戏要求玩家控制一个乌龟棋子 ...
- 牛客网 【每日一题】7月27日题目精讲—乌龟棋
来源:牛客网: 乌龟棋 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 文章目录 乌龟棋 题目描述 ...
- CJOJ 1087 【NOIP2010】乌龟棋 / Luogu 1541 乌龟棋(动态规划)
CJOJ 1087 [NOIP2010]乌龟棋 / Luogu 1541 乌龟棋(动态规划) Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个 ...
- noip2010乌龟棋解题报告
乌龟棋解题报告 题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一 的起点,第N格是终点, ...
- CODE[VS] 1068 乌龟棋
题目链接: CODE[VS]1068 乌龟棋 题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格 ...
最新文章
- 关于PKI架构(使用证书)保护Web访问的安全实现SSL的基本理论
- 10种避免大型部署的方法
- torch bceloss nan
- java 视频预览_java在上传视频时生成预览图
- python编程主要干嘛的-让孩子学了Python编程有什么用
- [SOJ] 畅通工程续
- Kubernetes 入门(1)基本概念
- 新人报道,写的东西还请大神们多指导!也希望能让和我一样的同事少走弯路。...
- mysql两个查询结果差集_【Mysql】求两个表(查询结果)的差集
- Java 一个简单的接口使用案例
- Android HPSocket SE_SOCKET_CREATE (3)
- git 解决合并冲突
- 【Python笔记】pyspark.sql库
- MySQL八股文连环45问,你能坚持第几问?
- 台式计算机usb口不识别鼠标,如何解决插入鼠标提示无法识别USB设备的问题
- 玫瑰花怎么画?花朵怎么画?鲜花怎么画?
- LeetCode:贪心算法(30道经典题目)
- CC2530芯片介绍
- vue获取当前路由的几种方式
- Jmeter-获取登录Session(cookie管理器)
热门文章
- 全面认识 RUST -- 掌控未来的雷电
- webpack4.0各个击破(9)—— karma篇
- mysql 5.7 导入出错_mysql5.x数据库文件导入mysql5.7数据库出错解决方法
- Android doc |Getting Started|部分 转载 --管理Activity生命周期
- dataframe里面数据截取的规律
- Python输出帮助文档的方法及命令详解
- MAC电脑常用快捷键
- uniapp使用android studio进行调试的配置
- 拓步机器人联网说明书_科沃斯IPO聚焦三大战略 谋划转型互联网生态企业
- python抽奖程序_Python编写抽奖式随机提问程序