P1541乌龟棋




这题咋做?
当然是爆搜了。
但是蒟蒻不会爆搜(TLE,WA两开花qwq),更不会记忆化搜索,所以我们换个思路。
注意这句话:
这肯定是有用的(洛咕还不会闲圈到给一句毛用都没有的话),那它有什么用呢?
我们再想一想,出牌的顺序与爬行牌的输入顺序没有半毛钱的关系,所以我们完全可以把牌分为4类,统计每种牌的个数。
这样一来,似乎看到了dp的影子。没错我们就是要用四维dp。而且上面的数据保证不会爆空间。
设计状态:dp[i][j][k][o]表示1的牌用i张,2的牌用j张,3的牌用k张,4的牌用o张时的最大得分。
转移方程:dp[i][j][k][o]=max(dp[i][j][k][o],dp[i-1][j][k][o],dp[i][j-1][k][o],dp[i][j][k-1][o],dp[i][j][k][o-1])其中i>0,j>0,k>0,o>0(因为如果等于0,-1后会造成-1下标)
初始状态:dp[0][0][0][0]=fen[1](第一个格子的分数),因为什么牌都不用的时候的初始分数是第一个格子的分数。
最后答案就是所有牌都出完了的分数。
直接上代码
#include<bits/stdc++.h>
#define ll long long
const ll inf=;
using namespace std;
int read()
{
char ch=getchar();
int x=;bool f=;
while(ch<''||ch>'')
{
if(ch=='-')f=;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return f?-x:x;
}
int n,m,fen[],pai[];//pai[i]是内容为i的牌的数量,fen[i]是第i个格子的分值
int dp[][][][];
int main()
{
n=read();m=read();
for(int i=;i<=n;i++)
fen[i]=read();
for(int i=;i<=m;i++)
pai[read()]++;
dp[][][][]=fen[];
for(int i=;i<=pai[];i++)//注意是要从0开始,因为我们可以不用某种牌
{
for(int j=;j<=pai[];j++)
{
for(int k=;k<=pai[];k++)
{
for(int o=;o<=pai[];o++)
{
int r=+i+*j+k*+o*;//用完牌后,当前的位置
if(i!=)dp[i][j][k][o]=max(dp[i-][j][k][o]+fen[r],dp[i][j][k][o]);//zhuyiyaopan0,fouzehuizha
if(j!=)dp[i][j][k][o]=max(dp[i][j-][k][o]+fen[r],dp[i][j][k][o]);
if(k!=)dp[i][j][k][o]=max(dp[i][j][k-][o]+fen[r],dp[i][j][k][o]);
if(o!=)dp[i][j][k][o]=max(dp[i][j][k][o-]+fen[r],dp[i][j][k][o]);
}
}
}
}
printf("%d",dp[pai[]][pai[]][pai[]][pai[]]);
}
P1541乌龟棋的更多相关文章
- 【洛谷】P1541 乌龟棋(四维背包dp)
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- codevs1068 乌龟棋==洛谷P1541 乌龟棋
P1541 乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家 ...
- P1541 乌龟棋 题解(洛谷,动态规划递推)
题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...
- 洛谷 p1541乌龟棋
洛谷 p1541乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行NN个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第NN格是终点,游戏 ...
- 洛谷P1541 乌龟棋 [2010NOIP提高组]
P1541 乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家 ...
- dp——洛谷 P1541 乌龟棋 —— by hyl天梦
题目:(转自 https://www.luogu.com.cn/problem/P1541) 题目描述 乌龟棋的棋盘是一行NN个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第NN格是 ...
- [NOIP2010] 提高组 洛谷P1541 乌龟棋
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- 洛谷 P1541 乌龟棋 Label:O(n^4)的dp
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- 洛谷 P1541 乌龟棋
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- Luogu P1541 乌龟棋(NOIP2010TG)
自己的第一篇博文 祭一下祭一下 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点, ...
随机推荐
- 牛客小白月赛16 A 小石的签到题 ( 博弈)
链接:https://ac.nowcoder.com/acm/contest/949/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- (四:NIO系列) Java NIO Selector
出处:Java NIO Selector 1.1. Selector入门 1.1.1. Selector的和Channel的关系 Java NIO的核心组件包括: (1)Channel(通道) (2) ...
- P2835 刻录光盘 (tarjan缩点)
[题目描述] 现在假设总共有N个营员(2<=N<=200),每个营员的编号为1~N.LHC给每个人发了一张调查表,让每个营员填上自己愿意让哪些人到他那儿拷贝资料.当然,如果A愿意把资料拷贝 ...
- win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据(使用外部redis)
目录 话题 (191) 笔记 (137) 资料区 (2) 评价 (33) 介绍 讨论区 话题 win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据( ...
- go中基本数据类型的相互转换
代码 // 基本数据类型的相互转换 package main import ( // 如果一个包没有被使用过,但又不想去掉,可在包名前加"_ "表示忽略 // 比如:_ " ...
- 定制团队自己的 Vue template
一,我们使用vue-cli 可以快速初始化vue.js的项目,官方提供了webpack,pwa,browserify-sipmple,等常用template 二.置知识1,模板结构template:该 ...
- FCKEditor报java.lang.NullPointerException
1.需要在 加value=“ ” <FCK:editor instanceName="replycontent" basePath="/fckeditor" ...
- Django集合Ueditor
语言版本环境:python3.6 1.win安装步骤: git下载源码https://github.com/zhangfisher/DjangoUeditor 解压DjangoUeditor3-mas ...
- PayPal支付对接
开发时间:2019-04-30 我的目标:在我们公司的海外网站上,接入PayPal支付,美国用户在线完成付款. 准备: (1)准备:公司注册信息(执照,注册号,法人等),法人信息(身份证,住址等) ( ...
- 一条sql引发的“血案”
前几天有一个项目要上线,需要对表的一个字段进行扩充,项目经理让我准备脚本,于是我准备了如下的脚本: )); )); )); 结果上线的时候,ord_log1和ord_log2表中有30万数据,在执行的 ...