乌龟棋(noip2010)
分析:该题是经典的动态规划题目。
题目中涉及到卡片数、卡片分4类、格子数等若干信息,又每张卡片仅能使用一次。求到达终点最多能能获得多少分。
从题目中可知卡片的使用顺序影响最终得分,我们可知状态转移和使用哪种类型的卡片有关,假设我们用i、j、k、L分别表示4类卡片,f表示能获得的最多分数。则有:
f[i,j,k,L]=max{f[i-1,j,k,L],f[i,j-1,K,l],f[i,j,k-1,L],
f[i,j,k,L-1]}+a[i*1+j*2+k*3+L*4+1]
{这是一个四维DP..如果用f[i,j,k,l]表示数值为1的用了i个,数值为2的用了j个,数值为3的用了k个,数值为4的用了l个时能够得到的最大得分...那么对于某一个状态,就可以从四个已知的状态的来,即:
f[i,j,k,l]:=max(f[i-1,j,k,l],f[i,j-1,k,l],f[i,j,k-1,l],f[i,j,k,l-1])+a[i*1+j*2+k*3+l*4+1];
初始f[0,0,0,0]:=a[1];
用sum[i]表示i数值的纸片有多少张...那么目标就是f[sum[1],sum[2],sum[3],sum[4]]
}
var
n,m:longint;
a:array[..] of longint;
sum:array[..] of longint;
f:array[-..,-..,-..,-..] of longint;
procedure init;
var i,x:longint;
begin
assign(input,'tortoise.in'); reset(input);
fillchar(sum,sizeof(sum),);
readln(n,m);
for i:= to n do read(a[i]);
readln;
for i:= to m do begin read(x); inc(sum[x]);end;
end;
function max(x,y,z,u:longint):longint;
begin
if (x>y)and(x>z)and(x>u) then max:=x
else if (y>z) and(y>u) then max:=y
else if z>u then max:=z
else max:=u;
end;
procedure main;
var i,j,l,k,t:longint;
begin
fillchar(f,sizeof(f),);
f[,,,]:=a[];
for i:= to sum[] do
for j:= to sum[] do
for k:= to sum[] do
for l:= to sum[] do
begin
t:=i+j*+k*+L*+;
f[i,j,k,l]:=max(f[i-,j,k,l],f[i,j-,k,l],f[i,j,k-,l],f[i,j,k,l-])+a[t];
end;
end;
begin
assign(output,'tortoise.out');rewrite(output);
init;
main;
writeln(f[sum[],sum[],sum[],sum[]]);
close(output);
end.
乌龟棋(noip2010)的更多相关文章
- 洛谷 P1541 乌龟棋 & [NOIP2010提高组](dp)
传送门 解题思路 一道裸的dp. 用dp[i][j][k][kk]表示用i个1步,j个2步,k个3步,kk个4步所获得的最大价值,然后状态转移方程就要分情况讨论了(详见代码) 然后就是一开始统计一下几 ...
- NOIP2010提高组乌龟棋 -SilverN
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- CJOJ 1087 【NOIP2010】乌龟棋 / Luogu 1541 乌龟棋(动态规划)
CJOJ 1087 [NOIP2010]乌龟棋 / Luogu 1541 乌龟棋(动态规划) Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个 ...
- NOIP2010乌龟棋[DP 多维状态]
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- [NOIP2010] 提高组 洛谷P1541 乌龟棋
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- 【NOIP2010】【P1317】乌龟棋
似乎很像搜索的DP(应该也可以用搜索写) 原题: 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物.乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N 格是终点, ...
- NOIP2010 乌龟棋
2乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌 ...
- 【洛谷1541】【CJOJ1087】【NOIP2010】乌龟棋
题面 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌 ...
- luoguP1541 乌龟棋 题解(NOIP2010)
P1541 乌龟棋 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<cma ...
- CH5E01 乌龟棋【线性DP】
5E01 乌龟棋 0x5E「动态规划」练习 描述 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物.乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1 格是唯一的起点,第N 格是终点 ...
随机推荐
- ToolBar Style
colorPrimaryDark 状态栏背景色. 在 style 的属性中设置. textColorPrimary App bar 上的标题与更多菜单中的文字颜色. 在 style 的属性中设置. A ...
- 修复 SQLite 数据库文件
目 录 第1章 说明 1 1 下载SQLite Tools 1 2 运行 2 第1章 说明 笔者编写的一个程序,无法往 SQLite 数据库文件里写数据.使用SQLiteSpy打开该 ...
- GreenPlum简单性能测试与分析
版权声明:本文由黄辉原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/195 来源:腾云阁 https://www.qclou ...
- @ExceptionHandler
@Controller public class AccessController { /** * 异常页面控制 * * @param runtimeException * @return */ @E ...
- [Hadoop 周边] Hadoop资料收集【转】
原文网址: http://www.iteblog.com/archives/851 最直接的学习参考网站当然是官网啦: http://hadoop.apache.org/ Hadoop http:// ...
- 第四周 更新Scrum站立会议
项目名称:连连看游戏(C#) 小组名称:4Boys 小组成员:武志远.李权.张金生.张政 站立会议内容 昨天完成的: 1.张金生主要介绍了自己完成了游戏界面 2.武志远主要负责查阅关于技术方面的资料, ...
- java之如何实现调用启动一个可执行文件,exe
/* * 运行可执行文件:.exe * 当要执行一个本地机器上的可执行文件时, * 可以使用java.lang包中的Runtime类,首先使用Runtime类,首先 * 使用Runtime类声明一个对 ...
- 生成json对象
JSONObject 对于放入的object,最终生成的json是什么样的? 两个JavaBean: public class ClassBean { private int grade; priva ...
- Java多线程-新特性-线程池
Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定可靠的多线程程序 ...
- 并发容器之CopyOnWriteArrayList
原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容 ...