NOIP 2010 乌龟棋
题目背景
小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。
题目描述
乌龟棋的棋盘是一行 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 个整数,表示小明最多能得到的分数。
输入输出样例
说明
每个测试点 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 乌龟棋的更多相关文章
- NOIP提高组2010 乌龟棋
小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点. 乌 ...
- 题解 【luogu P1541 NOIp提高组2010 乌龟棋】
题目链接 题解 题意: 有一些格子,每个格子有一定分数. 给你四种卡片,每次可以使用卡片来前进1或2或3或4个格子并拾取格子上的分数 每张卡片有数量限制.求最大分数. 分析 设\(dp[i]\)为第前 ...
- 1068 乌龟棋 2010年NOIP全国联赛提高组
1068 乌龟棋 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descrip ...
- 【noip 2009】 乌龟棋 记忆化搜索&动规
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- codevs1068乌龟棋
codevs1068乌龟棋 1068 乌龟棋 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamon 题目描述 Descrip ...
- NOIP 2010
tags: NOIP 并查集 动态规划 搜索 categories: 信息学竞赛 总结 机器翻译 乌龟棋 关押罪犯 引水入城 机器翻译 Solution 维护一个队列, 每次从词典中查词时将单词加入队 ...
- NOIP2010提高组乌龟棋 -SilverN
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- NOIP2010乌龟棋[DP 多维状态]
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- NOIP 2010题解
唔..NOIP2010比较简单,总体感觉不错. Problem 1: 机器翻译 水题,队列的简单应用. 读入时判断是否在内存中,可以用hash优化.如果不在内存中push进内存,放不下了pop hea ...
随机推荐
- VS2012出现加载失败时的解决办法 win7同样适用
今天更新了WIN8系统补丁,然后就出现了大量的问题,特别是经常用的软件像VS2012 老是加载失败,还说是缺少什么包一类的,弄了好长段时间终于解决了,现在将经验分享下 工具/原料 VS2012+WIN ...
- JavaScript - try catch finally throw
语法: try { tryCode - 尝试执行代码块 } catch(err) { catchCode - 捕获错误的代码块 } finally { finallyCode - 无论 try / c ...
- 富文本KindEditor使用
1.官网down KindEditor,添加到自己的项目中:添加时可把不需要的文件夹干掉,asp/php等等.我的项目用的是纯html和js,直接调用后台api: 2.页面引入相关js.eclipse ...
- vb,wps,excel 分裂
Sub 分列() '以空格为分隔符,连续空格只算1个.对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integ ...
- Python3.0 操作MySQL数据库执行SQL语句
py3不支持MySQLdb,需要导入pymysql模块 # coding: utf-8 # Team : Quality Management Center # Author:Carson # Dat ...
- jquery腾讯换肤的一些技术实现
//检查cookie if($.cookie("skinID")){ $("#cssSkin").attr("href","/st ...
- 「 HDU P4734 」 F(x)
# 题目大意 对于一个数 $x$,它的每一位数字分别是 $A_{n}A_{n-1}A_{n-2}\cdots A_{2}A_{1}$,定义其权重 $f(x)=\sum_{i=1}^{n}\left(A ...
- JavaScript实现AES算法加密和解密
JavaScript的加密和解密用的是google的CryptoJS库.本文以AES/ECB/NoPadding为例展示AES加密和解密的方法. 需要下载CryptoJS库,下载地址如下:https: ...
- mysql事物隔离
1.读未提交(行锁) 会发生脏读,事物未提交被其他事物看到,未提交的数据为脏数据. 2.读已提交(行锁) 会发生不可重复读,事物开始时,只能看到已经提交了的事物修改. 3.重复读(行锁) 该级别保证了 ...
- JavaScript中的特殊数据类型
JavaScript中的特殊数据类型 制作人:全心全意 转义字符 以反斜杠开头的不可显示的特殊字符通常为控制字符,也被称为转义字符.通常转义字符可以在字符串中添加不可显示的特殊字符,或者防止引号匹配混 ...