Problem D: 乌龟棋

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 24  Solved: 15
[Submit][Status][Web Board]

Description

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

乌龟棋中 M 张爬行卡片,分成 4 种不同的类型(M 张卡片中不一定包含所有 4 种类型 的卡片,见样例),每种类型的卡片上分别标有 1、2、3、4 四个数字之一,表示使用这种卡 片后,乌龟棋子将向前爬行相应的格子数。游戏中,玩家每次需要从所有的爬行卡片中选择 一张之前没有使用过的爬行卡片,控制乌龟棋子前进相应的格子数,每张卡片只能使用一次。 游戏中,乌龟棋子自动获得起点格子的分数,并且在后续的爬行中每到达一个格子,就得到 该格子相应的分数。玩家终游戏得分就是乌龟棋子从起点到终点过程中到过的所有格子的 分数总和。 很明显,用不同的爬行卡片使用顺序会使得终游戏的得分不同,小明想要找到一种卡 片使用顺序使得终游戏得分多。 现在,告诉你棋盘上每个格子的分数和所有的爬行卡片,你能告诉小明,他多能得到 多少分吗?

Input

Output

输出只有 1 行,1 个整数,表示小明多能得到的分数。

Sample Input

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

Sample Output

73

HINT

/*一共有四张卡片,代表所能走的不同的步数,也就是当前数的取得,有可能是在前一个数的基础上,走了一步/两步/三步/四步而来,因而考虑用一个四维的状态数组f[i][j][k][h]分别表示卡片的张数,DP列出所有可能的状态即可
要注意的细节:
1)第一格是唯一的起点,所以f[0][0][0][0]=a[1],也就是一张卡片都没有用的时候,取得的初值
2)如果用了第一张卡片,则用f[1][0][0][0]表示,有f[1][0][0][0]=f[0][0][0][0]+a[2],也就是从第一格开始,走了一格,实际上要取的数是a[2],也就是a[t+1],
其中t为卡片所规定的步数
3)每张卡片只能用一次,但每一种卡片不只一张,因此在输入的时候,需要做个统计
4)注意动规的初值,循环要从0开始,表示没有用到相应的卡片
*/
#include <iostream>
#define N 360
#define M 42
using namespace std;
int n,m,x,a[N],b[];
int f[M][M][M][M];
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=m;i++)
{
cin>>x;
b[x]++;
}
f[][][][]=a[];
for(int i=;i<=b[];i++)
for(int j=;j<=b[];j++)
for(int k=;k<=b[];k++)
for(int h=;h<=b[];h++)
{
x=i+j*+k*+l*;
if(i) f[i][j][k][h]=max(f[i][j][k][h],f[i-][j][k][h]+a[x+]);
if(j) f[i][j][k][h]=max(f[i][j][k][h],f[i][j-][k][h]+a[x+]);
if(k) f[i][j][k][h]=max(f[i][j][k][h],f[i][j][k-][h]+a[x+]);
if(l) f[i][j][k][h]=max(f[i][j][k][h],f[i][j][k][h-]+a[x+]);
}
cout<<f[b[]][b[]][b[]][b[]]<<endl;
return ;
}

  

Problem D: 乌龟棋【四维dp】的更多相关文章

  1. 洛谷P1541 乌龟棋(四维DP)

    To 洛谷.1541 乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游 ...

  2. codevs1068乌龟棋-四维DP,五维如何缩减一维

    我们从起点x开始暴力枚举所有决策 于是可以得到如下转移 void dfs(int x,int A,int B,int C,int D,int y) { if (x==n) {ans=max(ans,y ...

  3. P1541 乌龟棋(DP)

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

  4. P1541 乌龟棋 线性dp

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

  5. 洛谷$1541$ 乌龟棋 线性$DP$

    Luogu   CH Sol f[i]表示走到第i个格子时获得的最大分数 发现转移与各个爬行卡片的数量有关,一共只有4种卡片 所以就把这四种卡片的已使用张数也放进状态,f[i][a][b][c][d] ...

  6. 【洛谷】P1541 乌龟棋(四维背包dp)

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

  7. dp——洛谷 P1541 乌龟棋 —— by hyl天梦

    题目:(转自 https://www.luogu.com.cn/problem/P1541) 题目描述 乌龟棋的棋盘是一行NN个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第NN格是 ...

  8. NOIP2010乌龟棋[DP 多维状态]

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

  9. CH5E01 乌龟棋【线性DP】

    5E01 乌龟棋 0x5E「动态规划」练习 描述 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物.乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1 格是唯一的起点,第N 格是终点 ...

随机推荐

  1. [CERC2017]Intrinsic Interval——扫描线+转化思想+线段树

    [CERC2017]Intrinsic Interval https://www.luogu.org/blog/ywycasm/solution-p4747# 这种“好的区间”,见得还是比较多的了. ...

  2. 深入理解Java虚拟机—内存管理机制

    前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的. 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思 ...

  3. Educational Codeforces Round 55 (Rated for Div. 2):C. Multi-Subject Competition

    C. Multi-Subject Competition 题目链接:https://codeforces.com/contest/1082/problem/C 题意: 给出n个信息,每个信息包含专业编 ...

  4. source改变当前路径

    转摘自:http://hi.baidu.com/homappy/item/90e416525d2faf958c12edb7 Shell 脚本执行有三种方法 bash 脚本名 sh 脚本名 chmod ...

  5. 前端跨域之jsonp跨域

    jsonp跨域原理 原理:因为通过script标签引入的js是不受同源策略的限制的(比如baidu.com的页面加载了google.com的js).所以我们可以通过script标签引入一个js或者一个 ...

  6. idea真不习惯啊

    http://blog.csdn.net/z69183787/article/details/41416189

  7. linux下面which whereis find locate的使用

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索.这些是从网上找到的资料,因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用. which    ...

  8. PHP性能追踪及分析工具xhprof的安装与使用

    对于本地开发环境来说,进行性能分析xdebug是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhprof进行PHP性能追踪及分析. 我们今天就简单介绍一下x ...

  9. netsh winsock reset 命令并回车

    1. Win+R 打开运行窗口,输入 CMD 并确认打开命令行窗口.2. 在命令行窗口输入 netsh winsock reset 命令并回车,待提示重启计算机时,重启计算机

  10. IOS开发代码分享之获取启动画面图片的string

    http://www.jb51.net/article/55309.htm 本代码支持 iPhone 6 以下. 支持 iPhone 及 iPad ? 1 2 3 4 5 6 7 8 9 10 11 ...