![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
简单dp
我wa的一声就哭出来了
不想写题补题就来写题解了555
展开
-
【2021年CCPC河南省赛】闯关游戏
题目:小i正在玩一个闯关游戏,游戏一共n关。初始的时候小i有H点体力以及0个金币。小i只能按从第1关到第n关按顺序完成。在第i关时,小i要在三种操作中选择一种:1.当前体力不小于Ai可以选择这个操作,消耗Ai点体力,获得Bi个金币。2.当前体力不小于Ci可以选择这个操作,消耗Ci点体力,获得Di个金币。3.结束游戏,直接结算。当小i完成全部n个关卡后会自动结束游戏,进行结算。结算时小i最多获得了多少金币?题解:如果没有条件3就是很明显的背包dp。但在3的条件下,可以发现原先背原创 2022-05-03 23:04:46 · 1532 阅读 · 0 评论 -
Codeforces Round #785 (Div. 2)C. Palindrome Basis
C. Palindrome Basis题意:求和为n的所有情况数,要求为回文数相加。题解:首先想到的是预处理回文数,毕竟回文数就不是太嘛。代码跑了下4e4以内回文数是499个。然后我当时浅搜了下“求和为n的所有情况数”,有用递归有用dp的。当然优先考虑dp啦!然后考虑状态转移。首先:dp[0]=1。i表示第几个回文数,j表示和为n的数。外循环i,内循环j。dp[j]=dp[j](上一轮算好的结果)+dp[j-wt[i]](去掉这个回文数后);刚开始着实有点迷,自己推推数据就好。我的dp尊原创 2022-05-03 21:03:22 · 187 阅读 · 0 评论 -
P2426 删数【区间dp】
题意如图:我,一个dp废物。练题一年有余,第一次练区间dp。题解:连续删除一段数,故区间dp(原来这样写一个二维dp数组,dp[i][j]。i:从i开始j:包括j共删除j个数。那么可以写出转移公式dp[i][j]=dp[i][k]+dp[i+k][j-k]。#include<bits/stdc++.h>using namespace std;const int maxn=1000+7;#define ll long long#define sc scanf#defin原创 2022-04-18 21:48:06 · 160 阅读 · 0 评论 -
P1002 [NOIP2002 普及组] 过河卒
简单的dp题解:这题很裸但是要注意一些细节:比如马四周有8个点被包括,看不懂题意那个跳一步是啥意思,但是图上有,大概就知道是哪几个了。因为判断出界很麻烦我们把图向右向下平移两格。记得开long long。#include<bits/stdc++.h>#define ll long long#define sc scanf#define pr printf#define tor ::iteratorusing namespace std;const int mod=1e9原创 2022-04-15 21:23:28 · 189 阅读 · 0 评论 -
最长子序列【dp】【递归】
题目:推荐一个姐姐讲的最长子序列:指路本题解中的图都是截取这个视频~自己捋一遍思路:从最后一个开始推1)如果这两个相同,那长度肯定是两个字符串都去掉这个字符所求得的最长子序列+1。即:dp[i][j]=dp[i-1][j-1]+1;2)如果不相同,分别去掉两个字符串的最后一个字符,比较此时谁的最长子序列谁的最大,那就取谁。即dp[i][j]=max(dp[i-1][j],dp[i][j-1]);递推公式就是:(本题中比较的是s1[i-1]和s2[i-1],结合题意理解。)这个dp过原创 2021-08-13 03:36:45 · 320 阅读 · 0 评论 -
HUD2509 龟兔赛跑【dp】
题目:这里要求:该题给出条件:已知乌龟会骑电车,初始电车满电。比赛路程长度,兔子的速度,乌龟骑车速度,乌龟走的速度。充电站的个数、位置、用时。比较谁会胜出。分析:分别算时间长短,时间可能是小数,所以用double兔子直接路程除以时间乌龟:把初末位置也看成充电站点,则求出位置n+1时的最小时间。遍历一边前边的位置,使得dp[i]=max(dp[j]+t(j到i)) 0<=j<i代码:#include<bits/stdc++.h>#include<io原创 2021-08-13 22:41:21 · 60 阅读 · 0 评论 -
CodeForces 1461A String Generation【dp】
题目:门题意:算满足题意的集合数1)“*”本身就是1个2)以这个为起点延申,所有包含内的都得含 “ * ”be like:(草,我做题的时候好像没这张图)分析:首先想到的是暴力,大概知道会T,因为没得思路,还是大胆尝试。TLE。这是hi函数,算的是每个“ * ”为起点的允许的树,不删了,与正解无关。好,下一个。dp。从上往下推必不可能的,因为是下面影响上面。那就从下向上,想到这里就差不多了,找出递推公式:dp[i][j]+=min(dp[i+1][j-1],dp[i+1][j],dp原创 2021-08-15 17:15:08 · 70 阅读 · 0 评论 -
【CF #204 div1】B、Mashmokh and ACM【dp】
传送门题意:给出两个数,n、k。要求一个序列中后一位数对前一位数求余为0。n是序列内最大能赋的值,k是所求序列的长度。然后呢,求最多有多少种序列。and不要忘记对答案求余——mod=1e9+7题解:看的这位dalao的题解,讲的好详细:点我点我。包括如何往dp这方面想,对于我这个dp菜狗很有帮助hhh。写出dp的状态转移方程:dp[i][j]=求和(dp[k][j-1])///k是i的因数然后就是具体的处理了,看代码注释啦。代码:#include <bits/stdc++.h&原创 2021-12-09 21:13:50 · 154 阅读 · 0 评论 -
最小编辑距离【dp】
题目:错误思路:先做的最长子序列问题,我一看这题,嘿,直接求出的它们的最长子序列长度,拿最长的那个减去它不久行了?然后开干。WA。此刻我还没意识到自己的错误,修改了一两个数据,还是WA。分析(正确思路):这题其实和最长子序列问题非常像,需要改的就是递推公式。首先初始化使得dp[i][0]=i,dp[0][j]=j;然后dp[i][j]=max(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+(s[i-1]!=s[j-1]))代码:#include<bi原创 2021-08-15 14:35:22 · 78 阅读 · 0 评论 -
POJ2533 Longest Ordered Subsequence【dp】
题目:传送门要求:给一个序列,找出最长的递增子序列分析:对于n个数最长递增子序列,可以从n-1个数推出来,所以可以用dp;dp里面的所有值初始设置为1。令dp[i]是以a[i]为结尾的最长递增子序列,那么如果a[i+1]>a[i]会使dp[i+1]=dp[i]+1;那么对每一个dp[i]来说,找到前面比a[i]小的数,求出他们中的最大值+1就可以。注意,此时求出来的数值是:dp[i]是以a[i]为结尾的最长递增子序列。故要求整个序列的最大值,需要令dp从头开始遍历一边找出最大。代码原创 2021-08-13 21:14:14 · 56 阅读 · 0 评论 -
P1077 [NOIP2012 普及组] 摆花
洛谷地址题解:见代码。#include <bits/stdc++.h>using namespace std;const int maxn=1000+7;#define sc scanf#define pr printf#define ll long longll dp[maxn][maxn];int a[maxn];const int mod=1e6+7;int main() { int n,m;cin>>n>>m; for(int i=1;原创 2022-03-18 20:57:38 · 239 阅读 · 0 评论