luogu1541 乌龟棋 动态规划
题目大意
一行格子,每个格子里有数字。一些卡片,卡片上有1、2、3、4这几种数字。一开始你在格子1,随后每次选一个卡片,你可以前进卡片上的数字个格子,得到格子上的分数,然后讲该卡片丢弃。求取卡片的顺序,使得得到的分数之和最大。
题解
定义\(A\)数组为格子上的各个数字,\(f(p,a,b,c,d)\)为从位置1走到位置\(p\),已经用了\(a\)个数字1卡片,\(b\)个数字2卡片,\(c\)个数字3卡片,\(d\)个数字4卡片时,得到的分数的最大值。则有递归式:
\]
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define LOOP(i, n) for(int i = 1; i <= n; i++)
const int MAX_TABLE = 400, MAX_SORT_CARD_CNT = 15;
int F[MAX_TABLE][MAX_SORT_CARD_CNT][MAX_SORT_CARD_CNT][MAX_SORT_CARD_CNT][MAX_SORT_CARD_CNT];
int Table[MAX_TABLE];
int SortCardCnt[5];
int TotTable, TotCard;
int DP(int p, int a, int b, int c, int d)
{
if (p < 0 || a < 0 || b < 0 || c < 0 || d < 0)
return -1;
if (F[p][a][b][c][d] > 0)
return F[p][a][b][c][d];
int op1 = DP(p - 1, a - 1, b, c, d);
int op2 = DP(p - 2, a, b - 1, c, d);
int op3 = DP(p - 3, a, b, c - 1, d);
int op4 = DP(p - 4, a, b, c, d - 1);
return F[p][a][b][c][d] = max(op1, max(op2, max(op3, op4))) + Table[p];
}
int main()
{
int cardSort;
scanf("%d%d", &TotTable, &TotCard);
LOOP(i, TotTable)
scanf("%d", Table + i);
LOOP(i, TotCard)
{
scanf("%d", &cardSort);
SortCardCnt[cardSort]++;
}
memset(F, -1, sizeof(F));
F[1][0][0][0][0] = Table[1];
printf("%d\n", DP(TotTable, SortCardCnt[1], SortCardCnt[2], SortCardCnt[3], SortCardCnt[4]));
return 0;
}
luogu1541 乌龟棋 动态规划的更多相关文章
- luogu1541 乌龟棋 (dp)
dp..dp的时候不能设f[N][x1][x2][x3][x4],会T,要把N省略,然后通过1/2/3/4牌的数量来算已经走到哪一个了 #include<bits/stdc++.h> #d ...
- CJOJ 1087 【NOIP2010】乌龟棋 / Luogu 1541 乌龟棋(动态规划)
CJOJ 1087 [NOIP2010]乌龟棋 / Luogu 1541 乌龟棋(动态规划) Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个 ...
- 【题解】 Luogu P1541 乌龟棋总结 (动态规划)
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- P1541 乌龟棋 题解(洛谷,动态规划递推)
题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...
- NOIP2010提高组乌龟棋 -SilverN
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- 洛谷 P1541 乌龟棋 Label:O(n^4)的dp
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- 【noip 2009】 乌龟棋 记忆化搜索&动规
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- CH5E01 乌龟棋【线性DP】
5E01 乌龟棋 0x5E「动态规划」练习 描述 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物.乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1 格是唯一的起点,第N 格是终点 ...
- NOIP2013 乌龟棋
描述 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点 ...
随机推荐
- C - Xenia and Ringroad
Problem description Xenia lives in a city that has n houses built along the main ringroad. The ringr ...
- 5.27 sorm图
- 改善用户体验 Web前端优化策略总结
前端是庞大的,包括HTML.CSS.Javascript.Image.Flash等等各种各样的资源.前端优化是复杂的,针对方方面面的资源都有不同的方式.那么,前端优化的目的是什么? 1. 从用户角度而 ...
- Rabbit--ack机制
消息应答时执行一个任务可能需要花费几秒钟,你可能会担心如果一个消费者在执行任务过程中挂掉了. 一旦RabbitMQ将消息分发给了消费者,就会从内存中删除.在这种情况下,如果正在执行任务的消费者宕机,会 ...
- Leetcode0100--Same Tree 相同树
[转载请注明]http://www.cnblogs.com/igoslly/p/8707664.html 来看一下题目: Given two binary trees, write a functio ...
- 【sqli-labs】 less5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)
双注入查询可以查看这两篇介绍 https://www.2cto.com/article/201302/190763.html https://www.2cto.com/article/201303/1 ...
- UNIX SOCKET编程简介
1 . Layered Model of Networking Socket 编程的层次模型如下图所示, 最上面是应用层,应用层下面的是 SOCKET API 层,再下面是传输层和网络层 ...
- shell 结合expect实现ssh登录并执行命令
#!/bin/bash ips=( '127.0.0.1' ) ;i<${#ips[*]};i++)) do expect <<EOF #这里的 expect <<EOF ...
- URAL - 1114-Boxes (分步乘法原理)
题意; 给你n个盘子,A个红球,B个黑球,放的时候没有限制,可以不放,可以放一个红球,可以放一个黑球,也可以两个同时放,可以有剩余的球. 求一共有多少放法. 思路: 可以利用分步乘法原理,红球和黑球是 ...
- Redis学习笔记(一)-持久化
一.RDB持久方式 RDB持久化是把当前进程的数据已快照的形式保存到硬盘的过程. 触发方式: 1.手动触发命令:save和bgsave save:阻塞式,内存较大的实例在执行过程中会造成长时间的阻塞, ...