![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
dp
文章平均质量分 55
dp
Echo_ac
不知未来怎样,现在一定全力以赴
展开
-
Codeforces Round #786 (Div. 3) G. Remove Directed Edges——树形dp+记忆化
思路参考题目链接思路题目要求删除一些边,要让最后每个点的入度,出度都小于最开始的情况,或者等于0。那么出度为1或者入度为1的边一定会被删掉,而且题目说明不存在重边和环,最后的结果一定是一条链。那么我们就树形dp,按照题目的约束去寻找最长的那一条链的长度即可。dp[u]:dp[u] :dp[u]: 以 uuu 开头的链的长度,uuu 的出度大于1,才可更新dp[u]dp[u]dp[u],uuu 的入度大于1才可向父亲转移,不然必定会被删掉。注意记忆化,dp[u]dp[u]dp[u] 被更新过后就原创 2022-05-03 15:14:16 · 386 阅读 · 0 评论 -
L3-001 凑零钱 (30 分)——01背包+路径记录
题目思路凑出价值为 mmm的零钱等价于从 v[i]=w[i]v[i]=w[i]v[i]=w[i] 的01背包中凑出花费了体积为 mmm,最大价值为 mmm 的方案。我们将零钱金额从大到小排序,那么如果存在相同的方案,后来的字典序一定比之前的字典序小,所以直接更新即可。AC代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i&g原创 2022-03-27 23:31:51 · 537 阅读 · 0 评论 -
蓝桥杯2021年第十二届省赛真题-砝码称重
题目链接思路dp[i][j]=1/0dp[i][j] =1/0dp[i][j]=1/0 : 表示前i个砝码能够凑成重量 jjj如果 j=w[i]j=w[i]j=w[i] ,那么dp[i][j]=1dp[i][j]=1dp[i][j]=1否则如果我们看如果不用第 iii 个砝码,能否凑出重量 jjj:dp[i−1][j]dp[i-1][j]dp[i−1][j]如果用了第 iii 个砝码, 要么和第iii 个砝码作差凑出 jjj, 要么作和凑出重量 jjj ,:dp[i−1][abs(j−w[i原创 2022-03-20 23:30:44 · 331 阅读 · 0 评论 -
NC201607 DDoS 披着最短路外衣的记忆化搜索
题目传送门文章目录题解AC代码暴力搜索代码题解这道题就是要求求从点1到点n的方案数字,采用记忆化搜索,如果直接暴力搜索只能能过%90,定义f[i] : 表示从点i到n的最大方案数字,初始化f[n] = 1其余见代码AC代码#include<bits/stdc++.h>#define mem(a,b) memset(a,b,sizeof a) using namespace std;const int N = 5e5+9;const int mod = 20010905原创 2021-01-28 14:24:13 · 95 阅读 · 0 评论 -
过河卒——(披着搜索皮的动态规划)
题目传送门文章目录废话:思路:代码:废话:开始以为是一道dfs,写了结果超时,只过了两个样例,这道题牛客寒假训练营的时候做过,当时没做出来,后来补上了。过了这么久又把他当成dfs了,思路参考某大佬大佬博客思路:1小兵只能往下或者右边走,用二维数组a来表示到达这个点的路径条数2由小兵的行走方式,可以推出状态转移方程a[i][j] = a[i-1][j] + a[i][j-1] (到达这个点的路径条数等于到达它上一个点和左边的点的路径条数之和)3有些细节处理注意代码注释代码:#includ原创 2020-05-30 09:25:17 · 155 阅读 · 0 评论 -
采药 dp
题目#include<bits/stdc++.h>using namespace std;int tim[1001] = {0};int w[1001] = {0};int dp[101][1001]={0};//dp[i][j]表示到第i课草药在限制条件为所j取得得最大价值//状态转移方程://dp[i][j] = max(dp[) int main(){ in...原创 2020-04-12 22:04:05 · 129 阅读 · 0 评论 -
传球游戏 简单dp
题目思路:注意外层循环是j,其余见注释#include<iostream>using namespace std;const int N = 31;int dp[N][N-10]={0};//dp[i][j]表示用了j次,//传到第i个人得总方案数 //状态转移方程:dp[i][j] = dp[i-1][j-1] + dp[i+1][j-1] int main(){...原创 2020-04-12 22:02:33 · 116 阅读 · 0 评论 -
乌龟棋 dp
题目传送门前言:本文思路参考是本人浏览博客看到的,写作时已忘记作者出处思路:1. 定义一个四维数组dp[i][j][k][l]表示用了一类卡i张,二类j张,三类k张,四类l张,所得到的最大分数。2. 状态转移方程:dp[i][j][k][l] = max(dp[i-1][j][k][l] ,dp[i][j-1][k][l],dp[i][j][k-1][l],dp[i][j][k][l-1]...原创 2020-04-12 22:00:11 · 86 阅读 · 0 评论 -
被3整除的子序列 dp
题目传送门本文参考资料注意:子序列可以不连续/*设dp[0],dp[1],dp[2],表示除3得到的余数分别为0,1,2。每增加一个数就更新一遍数组。余数为0:dp[0]=dp[0]+dp[0]+1; dp[1]=dp[1]+dp[1]; dp[2]=dp[2]+dp[2];余数为1:dp[0]=dp[0]+dp[2]; dp[1]=dp[1]+dp...原创 2020-04-08 22:21:35 · 171 阅读 · 0 评论