题目背景

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

题目描述

乌龟棋的棋盘是一行 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 。

思路:DP.

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 41
using namespace std;
int n,m,x;
int g[],num[];
int f[MAXN][MAXN][MAXN][MAXN];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&num[i]);
f[][][][]=num[];
for(int i=;i<=m;i++){
scanf("%d",&x);
g[x]++;
}
for(int a=;a<=g[];a++)
for(int b=;b<=g[];b++)
for(int c=;c<=g[];c++)
for(int d=;d<=g[];d++){
int r=+a+b*+c*+d*;
if(a!=) f[a][b][c][d]=max(f[a][b][c][d],f[a-][b][c][d]+num[r]);
if(b!=) f[a][b][c][d]=max(f[a][b][c][d],f[a][b-][c][d]+num[r]);
if(c!=) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c-][d]+num[r]);
if(d!=) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c][d-]+num[r]);
}
cout<<f[g[]][g[]][g[]][g[]];
}

NOIP 2010 乌龟棋的更多相关文章

  1. NOIP提高组2010 乌龟棋

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

  2. 题解 【luogu P1541 NOIp提高组2010 乌龟棋】

    题目链接 题解 题意: 有一些格子,每个格子有一定分数. 给你四种卡片,每次可以使用卡片来前进1或2或3或4个格子并拾取格子上的分数 每张卡片有数量限制.求最大分数. 分析 设\(dp[i]\)为第前 ...

  3. 1068 乌龟棋 2010年NOIP全国联赛提高组

    1068 乌龟棋 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descrip ...

  4. 【noip 2009】 乌龟棋 记忆化搜索&动规

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

  5. codevs1068乌龟棋

    codevs1068乌龟棋 1068 乌龟棋 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamon   题目描述 Descrip ...

  6. NOIP 2010

    tags: NOIP 并查集 动态规划 搜索 categories: 信息学竞赛 总结 机器翻译 乌龟棋 关押罪犯 引水入城 机器翻译 Solution 维护一个队列, 每次从词典中查词时将单词加入队 ...

  7. NOIP2010提高组乌龟棋 -SilverN

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

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

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

  9. NOIP 2010题解

    唔..NOIP2010比较简单,总体感觉不错. Problem 1: 机器翻译 水题,队列的简单应用. 读入时判断是否在内存中,可以用hash优化.如果不在内存中push进内存,放不下了pop hea ...

随机推荐

  1. 使用过Fetch之后,你还想使用AJAX吗

    之前做数据交互的时候,请求数据一直使用ajax,看到网上有使用Fetch,所以也想拿来尝尝鲜 本次介绍只涉及fetch相关,传统的ajax基本上不涉及 当然你也要考虑兼容.浏览器支持情况. 一会这个只 ...

  2. Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案

    IJKPlayer拖动播放进度会导致重新请求数据,未使用已经缓冲好的数据,所以应该尽量控制缓冲区大小,减少不必要的数据损失. mMediaPlayer.setOption(IjkMediaPlayer ...

  3. applicationContext.getBean(“loginEntity”)

    <!-- 指定Spring需要扫描的包,并将所有是别的类放到容器中,便于识别被注解的受托管bean --> <context:component-scan base-package= ...

  4. vscode增加xdebug扩展

    首先确保php增加了xdebug扩展,方法很多,可参考 https://www.cnblogs.com/wanghaokun/p/9084188.html.可通过phpinfo()查看是否已开启支持. ...

  5. 洛谷 P2341 [HAOI2006]受欢迎的牛

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...

  6. 迅为7寸Android嵌入式安卓触摸屏,工业一体机方案

    嵌入式安卓触摸屏板卡介绍-工业级核心板: 嵌入式安卓触摸屏功能接口介绍: 品质保障: 核心板连接器:进口连接器,牢固耐用,国产连接器无法比拟(为保证用户自行设计的产品品质,购买核心板用户可免费赠送底板 ...

  7. MySQL ORDER BY IF() 条件排序

    源 在做sqlzoo的时候,碰到一个SQL的排序问题,他把符合条件的单独几行,可以放在查询结果的开始,或者查询结果的尾部 通过的方法就是IN语句(也可以通过IF语句) 自己做了个测试,如下,这个是表的 ...

  8. day1 python 基础

    # 一行注释"""多行注释"""print("hello world\n" * 3)name = "sure& ...

  9. Android反编译初步

    网上关于Android反编译的帖子很多,反编译的步骤也是很详细,本文Android反编译参考博客:https://www.cnblogs.com/dhcn/p/7120891.html 而反编译中最主 ...

  10. 利用filter过滤去重

    var r, ary = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry']; r ...