刚开始理解错题意了,题中说“玩家每次需要从所有的爬行卡片中选择一张之前没有使用过的爬行卡片”指的是不能用同一张卡片,我给理解成不能连续用同一种卡片了。后来想想其实题目中的说法歧义不大,是我粗心才导致看错的。

最终我看错的导致了题目难度更高一些,偏偏写完了更高难度的题之后还过不了..直到最后对照样例才发现不对劲,然后稍稍修正就AC了,整体而言这道题用了近两个小时,一点也不快,毕竟题都理解错了肯定多花不少时间。

这道题的收获是:DP的核心在于用尽量少的数据去完整的刻画出状态,尽量少是一个点,另一个点是绝对不应该有任何的冗余数据,即如果某个坐标能被其他坐标计算出来,那显然这个坐标就没有存在的必要了!

最后,上代码

Code

#include <iostream>
#include <cstring> using namespace std;
int N,M,a[400],x,card[5],dp[41][41][41][41],ans;
int dfs(int c1,int c2,int c3,int c4)
{
if(c1>card[1]||c2>card[2]||c3>card[3]||c4>card[4])return -99999999;
if(dp[c1][c2][c3][c4]!=-1)return dp[c1][c2][c3][c4];
int pos=1+1*(card[1]-c1)+2*(card[2]-c2)+3*(card[3]-c3)+4*(card[4]-c4);
if(pos==1)return dp[c1][c2][c3][c4]=a[1];
int tans=0;
tans=max(tans,dfs(c1+1,c2,c3,c4));
tans=max(tans,dfs(c1,c2+1,c3,c4));
tans=max(tans,dfs(c1,c2,c3+1,c4));
tans=max(tans,dfs(c1,c2,c3,c4+1));
return dp[c1][c2][c3][c4]=a[pos]+tans;
} signed main()
{
memset(dp,-1,sizeof(dp));
cin>>N>>M;
for(int i=1;i<=N;i++)cin>>a[i];
for(int i=1;i<=M;i++)cin>>x,card[x]++;
cout<<dfs(0,0,0,0)<<endl;
return 0;
}

P1541-DP【绿】的更多相关文章

  1. 洛谷 P1541 乌龟棋 —— DP

    题目:https://www.luogu.org/problemnew/show/P1541 DP. 代码如下: #include<iostream> #include<cstdio ...

  2. 「疫期集训day4」硝烟

    那真是一阵恐怖的炮击(that boomed booms),响亮的炮音(that noise),滚滚的硝烟(that smoke),熊熊的火焰在围绕着我们前进...小心前进(go and be car ...

  3. 【洛谷】P1541 乌龟棋(四维背包dp)

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

  4. 【题解】洛谷P1541 [NOIP2010TG] 乌龟棋(类似背包的DP)

    题目来源:洛谷P1541 思路 类似背包的题 总之就是四种卡牌取的先后顺序不同导致的最终ans不同 所以我们用一个四维数组每一维分别表示第几种取了几张的最大分数 然后就是简单DP解决 代码 #incl ...

  5. dp——洛谷 P1541 乌龟棋 —— by hyl天梦

    题目:(转自 https://www.luogu.com.cn/problem/P1541) 题目描述 乌龟棋的棋盘是一行NN个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第NN格是 ...

  6. 洛谷P1541 乌龟棋(四维DP)

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

  7. P1541 乌龟棋 线性dp

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

  8. Luogu P1541 乌龟棋 【线性dp】

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

  9. 【dp】P1541 乌龟棋

    链接: https://www.luogu.org/problemnew/show/P1541 [思路]: 用f[a][b][c][d]表示,第一张卡用a张,第二张卡用b张..........然后就盘 ...

  10. 洛谷 P1541 乌龟棋 & [NOIP2010提高组](dp)

    传送门 解题思路 一道裸的dp. 用dp[i][j][k][kk]表示用i个1步,j个2步,k个3步,kk个4步所获得的最大价值,然后状态转移方程就要分情况讨论了(详见代码) 然后就是一开始统计一下几 ...

随机推荐

  1. spring报错-Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 63

    这个错误原因是因为JDK版本过高,改一下版本就行了 把里面的19改成8 这样就行了

  2. LCIS最长公共上升子序列!HDU-1423

    This is a problem from ZOJ 2432.To make it easyer,you just need output the length of the subsequence ...

  3. flask统一异常捕获(作用:统一捕获指定的异常并返回)

    flask中可以使用装饰器errorhandler来对指定的异常.状态码等统一捕获并处理. 对指定的状态码进行统一捕获 @app.errorhandler(404) # 参数e是异常的详细信息的对象, ...

  4. 基于 WinCC OA 构建分布式可视化平台

    ​WinCC OA 的全称是:SIMATIC WinCC Open Architecture,是西门子工业自动化品牌SIMATIC系列的一部分.专门针对客户定制大型和/或复杂的应用以及需要满足特定系统 ...

  5. windows10更新文件存在哪里

    windows10更新文件存在哪里windows10更新文件存在哪里 电脑系统每次更新都会有相应的更新文件,很多win10用户都想知道电脑更新文件存在哪里,其实这个很好找的. 你先双击此电脑进入,然后 ...

  6. Springboot3核心特性

    一.简介 1. 前置知识 Java17 Spring.SpringMVC.MyBatis Maven.IDEA 2. 环境要求 环境&工具 版本(or later) SpringBoot 3. ...

  7. Ubuntu 20.04 设置时区、配置NTP同步 timesyncd 代替 ntpd

    本文的服务器环境为 Ubuntu 20.04 系统,一个拥有 sudo 权限的非 root用户,并开启了防火墙. 基本时间命令 要在 Ubuntu 20.04 系统上查看服务器时间,可以使用 date ...

  8. 用Python来查询聊天记录

    用Python来查询聊天记录 代码 import re def Start(First_Date, Second_Date, First_Name, Second_Name): First = re. ...

  9. 动态规划问题(六)最长公共子序列(LCS)

    问题描述 ​ 给你两个字符串,要求得到这两个字符串的最长公共子序列长度. ​ 比如:对于输入的字符串 S1 "AGGTAB" 和 S2 "GXTXAYB",它们 ...

  10. RV1126 DSI 调试

    一.基本信息 开发板:RV1126 linux版本:4.19.111 显示屏:HX070JGI50(7寸) 显示器分别率:1024 * 600 二.MIPI协议 连接示意图(图片来源,正点资料) MI ...