题目背景

小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。

题目描述

乌龟棋的棋盘是一行NN个格子,每个格子上一个分数(非负整数)。棋盘第1格是唯一的起点,第NN格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。

乌龟棋中MM张爬行卡片,分成4种不同的类型(MM张卡片中不一定包含所有44种类型的卡片,见样例),每种类型的卡片上分别标有1,2,3,41,2,3,4四个数字之一,表示使用这种卡片后,乌龟棋子将向前爬行相应的格子数。游戏中,玩家每次需要从所有的爬行卡片中选择一张之前没有使用过的爬行卡片,控制乌龟棋子前进相应的格子数,每张卡片只能使用一次。

游戏中,乌龟棋子自动获得起点格子的分数,并且在后续的爬行中每到达一个格子,就得到该格子相应的分数。玩家最终游戏得分就是乌龟棋子从起点到终点过程中到过的所有格子的分数总和。

很明显,用不同的爬行卡片使用顺序会使得最终游戏的得分不同,小明想要找到一种卡片使用顺序使得最终游戏得分最多。

现在,告诉你棋盘上每个格子的分数和所有的爬行卡片,你能告诉小明,他最多能得到多少分吗?

输入输出格式

输入格式:

每行中两个数之间用一个空格隔开。

第11行22个正整数N,MN,M,分别表示棋盘格子数和爬行卡片数。

第22行NN个非负整数,a_1,a_2,…,a_Na1​,a2​,…,aN​,其中a_iai​表示棋盘第ii个格子上的分数。

第33行MM个整数,b_1,b_2,…,b_Mb1​,b2​,…,bM​,表示M张爬行卡片上的数字。

输入数据保证到达终点时刚好用光MM张爬行卡片。

输出格式:

11个整数,表示小明最多能得到的分数。

输入输出样例

输入样例#1: 复制

9 5
6 10 14 2 8 8 18 5 17
1 3 1 2 1

输出样例#1: 复制

73

说明

每个测试点1s1s

小明使用爬行卡片顺序为1,1,3,1,21,1,3,1,2,得到的分数为6+10+14+8+18+17=736+10+14+8+18+17=73。注意,由于起点是11,所以自动获得第11格的分数66。

对于30\%30%的数据有1≤N≤30,1≤M≤121≤N≤30,1≤M≤12。

对于50\%50%的数据有1≤N≤120,1≤M≤501≤N≤120,1≤M≤50,且44种爬行卡片,每种卡片的张数不会超过2020。

对于100\%100%的数据有1≤N≤350,1≤M≤1201≤N≤350,1≤M≤120,且44种爬行卡片,每种卡片的张数不会超过4040;0≤a_i≤100,1≤i≤N,1≤b_i≤4,1≤i≤M0≤ai​≤100,1≤i≤N,1≤bi​≤4,1≤i≤M。

本来写了五维

但是第一维i是没有必要的   因为所走的距离可以用这四种牌算出来

然后就是枚举所有牌的情况就可以了

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);i--)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define pb push_back
#define fi first
#define REP(i,N)  for(int i=0;i<(N);i++)
#define CLR(A,v)  memset(A,v,sizeof A)
///
#define inf 0x3f3f3f3f
#define N 350+5
int dp[41][41][41][41];
int aa[N];
int sum[5];
int main()
{int n,m;RII(n,m);rep(i,1,n)RI(aa[i]);rep(i,1,m){int x;RI(x);sum[x]++;}dp[0][0][0][0]=aa[1];rep(a,0,sum[1])rep(b,0,sum[2])rep(c,0,sum[3])rep(d,0,sum[4]){int x=1+a+2*b+3*c+4*d;if(a)dp[a][b][c][d]=max(dp[a-1][b][c][d]+aa[x],dp[a][b][c][d]);if(b)dp[a][b][c][d]=max(dp[a][b-1][c][d]+aa[x],dp[a][b][c][d]);if(c)dp[a][b][c][d]=max(dp[a][b][c-1][d]+aa[x],dp[a][b][c][d]);if(d)dp[a][b][c][d]=max(dp[a][b][c][d-1]+aa[x],dp[a][b][c][d]);}cout<<dp[sum[1]][sum[2]][sum[3]][sum[4]];return 0;
}

View Code

转载于:https://www.cnblogs.com/bxd123/p/10611167.html

P1541 乌龟棋 线性dp相关推荐

  1. 【每日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张牌 思路 ...

  2. P1541 乌龟棋 题解(洛谷,动态规划递推)

    题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...

  3. 洛谷P1541 乌龟棋

    原题传送门 一道比较简单易懂的线性DP题: 设状态dp[a][b][c][d]表示使用数量分别为a, b, c, d张的不同的牌 num数组存储每一个位置的分值 r = a + b * 2 + c * ...

  4. 【NOIP2010】【P1317】乌龟棋

    似乎很像搜索的DP(应该也可以用搜索写) 原题: 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N 格是终点 ...

  5. 牛客网 【每日一题】7月27日题目精讲—乌龟棋

    来源:牛客网: 乌龟棋 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 文章目录 乌龟棋 题目描述 ...

  6. 【codevs1068】乌龟棋noip10年TG----第二个A掉的钻石题

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

  7. codevs1068 乌龟棋 题解

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

  8. CODE[VS] 1068 乌龟棋

    题目链接: CODE[VS]1068 乌龟棋 题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格 ...

  9. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  10. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

最新文章

  1. 两相四线步进电机C语言程序,求大神帮忙看单片机控制两相四线步进电机的程序!...
  2. python怎么定义空矩阵_python 空矩阵
  3. 计算机名字更改时不显示文字,教大家电脑中文件夹不显示名字怎么办
  4. 使用绘图API自定义组件
  5. gephi java教程_Gephi的使用--以社交网络图为例
  6. frameset在html5下用什么代替_速速围观!冬至吃货地图来啦~蚌埠的吃货们,你们今天吃什么?...
  7. MySQL 定时任务event 按天建表 并将前一天数据导入新建的表中并删除总表数据 实现分表功能
  8. IE下AjaxForm上传文件直接提示下载的兼容性Bug
  9. R-CNN学习笔记4:Fast R-CNN
  10. tp3.2 生成二维码
  11. VSCode配置java代码运行环境
  12. 2021 年“认证杯”数学中国数学建模网络挑战赛 B题解题思路
  13. MiniUSB管脚接口引脚定义
  14. (计算圓柱体的体积)编写程序,读入圆柱体的半径和高,并使用下列公式计算圆柱的体积
  15. 测试面试题-如何测试朋友圈
  16. AltiumDesigner19(AD19)使用设置技巧
  17. 渗透测试实战3——bulldog2靶机入侵
  18. mybatis从入门到精通(刘增辉著)-读书笔记第一章
  19. sql依据单个字段去重_sql如何去重查询
  20. Python+Excel+VBA实现批量自助生成名牌

热门文章

  1. 【最小割】HDU 4971 A simple brute force problem.
  2. Microsoft Visual C++ 14.0 is required (Unable to find vcvarsall.bat)
  3. 文本生成系列之transformer结构扩展(三)
  4. 多模态 | 从顶会论文看多模态预训练研究进展
  5. 看了这份《算法中文手册》笔记,就再也不怕字节了~
  6. 【损失函数】常见的损失函数(loss function)总结
  7. 20200210_logistic回归来预测违约的概率
  8. 20191208_神经网络交叉验证
  9. LeetCode学习记录(1-3)
  10. HITS 算法(Hypertext Induced TopicSelection)