![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 51
Henry_WYH
兴趣使然
展开
-
ABC 129 E - Sum Equals Xor
E - Sum Equals Xorf[i][1]表示前j位,等于给定数L的方案数f[i][1]表示前i位,严格小于给定数L的方案数有状态转移方程:p[i]=='1':f[i][0]=f[i-1][0]*2%mod; //第一个数*2+1,第二个数*2或者反过来f[i][1]=(f[i-1][0]+f[i-1][1]*3)%mod; //要小于当前数,则为前一位的相等的数加上前一位小于的数中的两个分别*2+1或者都只*2p[i]=='0'f[i][0]=f[i-1][0];f[i][1原创 2022-03-28 20:58:12 · 305 阅读 · 1 评论 -
POJ Maximum sum
输入1101 -1 2 2 3 -3 4 -4 5 -5输出13这是一道最大子段和的变形,状态方程设计的非常巧妙,我们先仿照最大子段和f[i]表示以i结尾的最大字段和F[i]表示i位置及以前(可以不包括i)的最大子段和g[i] 表示以i开头的最大字段和 G{i]表示i位置及以后(可以不包括i)的最大子段和有状态转移:f[i]=a[i]+max(0,f[i−1])f[i] = a[i] + max(0,f[i-1])f[i]=a[i]+max(0,f[i−1])F[i]=m.原创 2021-11-18 19:06:21 · 194 阅读 · 0 评论 -
男人八题 硬币 Coins
第一眼看这道题,直接上单调队列优化,但是超时了!O(nm)的算法,只是因为常数太大了…//超时算法,单调队列优化#include<bits/stdc++.h>using namespace std;const int M = 100010;typedef long long LL;#define rep(i,ll,rr) for(int i=ll;i<=rr;++i)LL n,m,a[110],ss[110],d[M],idx=0;LL f[M],g[M],q[M];.原创 2021-11-11 00:12:52 · 227 阅读 · 0 评论 -
P1399 [NOI2013] 快餐店
https://www.luogu.com.cn/problem/P1399算法:基环树DP这道题是我学完基环树后自己做出来的第一道题目hh,虽然调了很久和这道题目有些类似的题目有IOI2008 Island 这题https://www.luogu.com.cn/problem/P4381下面来说这一题的思路:n点n边,任意两点之间都有一条双向边,因此这是一颗基环树,对于基环树DP的题目,我们首先做的应该是找到环并断开1.找环void dfs_s(int u,int fa){ s原创 2021-10-16 14:45:54 · 198 阅读 · 0 评论 -
LGP2602 ZJOI COUNT数字计数
数位DP板子记得不清不楚,我自我检讨一下…今晚的CF就明天再补了https://www.luogu.com.cn/problem/P2602F[pos][cnt]表示将数字分解后从高位向低位枚举的第i位,区域数字中出现cnt次指定位数字的情况#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 16;int f[N][N],power[N];int a[N],x,y,idx;原创 2021-10-08 23:13:33 · 84 阅读 · 0 评论 -
How Many 0‘s?
这道题的题意就是给定L和R让求L到R之间出现的所有数中数位是0的个数和其实是一道思维题+递推模拟一个例子:40320在最后一位:40310在倒数第二位:40100在倒数第三位:3*100+32+1 (注意此时0~32共33个)0在最后一位:0因此我们直接枚举一遍数位即可:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using names.原创 2021-09-26 18:36:43 · 82 阅读 · 0 评论 -
cf744 div3 G Minimal Coverage
大意是有之前拜访的直线的端点当作起始点摆放,要求最小的覆盖并集长度状态标识:f[i][k]表示前i个直线能摆放的,当前距离最左边曾到过的端点为参照系的距离为k ,的所有方案总的覆盖并集长度的最小值有状态转移方程://2000是所能保证的最差情况的最优解,鉴于ai<=1000;此状态表示如果向右摆放所能得到的总长度最小值if(k+a[i]<=2000) f[i][k+a[i]]=min(f[i][k+a[i]],max(f[i-1][k],k+a[i]));//表示向左摆放,如果.原创 2021-10-02 16:48:55 · 132 阅读 · 0 评论 -
DP中的实际意义: NC17621 管道取珠 NC210732 灯谜
这道题直接要求ai^2,但是我们呢不可能把所有ai都求出来然后求和,因此我们需要换个角度切入这里的ai^2 是有实际意义的:ai ^2表示两个一摸一样的装置一起取珠子,取得的结果完全一样的方案数。因此我们可以设出状态标识:f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]表示第一个装置上面取到第i个,下面取到第j个,第二个装置上面取到第k个,下面取到第l个的方案数当一上,一下分别等于二上二下的时候对应四种状态转移方程但是由于数据范围,开思维远超内存,因此我们可以压缩掉一..原创 2021-10-02 09:58:55 · 109 阅读 · 0 评论 -
2011北京区域赛概率DP改:食堂
链接:https://ac.nowcoder.com/acm/problem/210487来源:牛客网题目描述 吉吉国王偶尔会回想起自己的高中时代。在吉吉国王的高中时代,下课后冲向食堂是每个学生的基本操作,但是总得有人失败,为什么不能是我,实际上吉吉国王在打饭这件事上也是失败过很多次,比如没带饭卡,走错窗口,甚至食堂关门。吉吉国王的高中食堂排队可以看成一个长度为nn的队列,一开始吉吉国王站在mm这个位置上,一般来说,窗口前的第一个人在打饭的时候会发生四种情况。第一种情况是打饭的时候窗口没人,这个时原创 2021-09-29 16:27:46 · 162 阅读 · 1 评论 -
Happy Running 概率DP
链接:https://ac.nowcoder.com/acm/problem/15532来源:牛客网Happy Running, an application for runners, is very popular in CHD.In order to lose weight, fdf decides to run k meters per day with Happy Running. Let’s regard the school as a circular runway with total原创 2021-09-28 20:07:00 · 210 阅读 · 0 评论 -
CF55D Beautiful numbers
题目描述Volodya是一个很皮的男♂孩。他认为一个能被它自己的每一位数上的数整除的数是很妙的。我们先忽略他的想法的正确性(如需证明请百度“神奇海螺”),只回答在l到r之间有多少个很妙的数字。输入输出格式输入:总共有t个询问:第一行:t;接下来t行:每行两个数l和r。注意:请勿使用%lld读写长整型(虽然我也不知道为什么),请优先使用cin(或者是%I64d)。输出:t行,每行为一个询问的答案。输入输出样例输入 #1复制11 9输出 #1复制9输入 #2复制112 15输出原创 2021-09-27 17:49:19 · 72 阅读 · 0 评论 -
AtCoder Beginner Contest 220 D - FG operation
ABC几乎每一次D都是一道简单DP吧hh…这次的D是令f[i][j] 表示前i位,最后一位是j(j属于0~9)的方案数线性DP,顺着递推一定能够得到结果,转移方程:cnt[i][j*a[i]%10]=(cnt[i][j*a[i]%10]+cnt[i-1][j])%mod;cnt[i][(j+a[i])%10]=(cnt[i][(j+a[i])%10]+cnt[i-1][j])%mod;分别表示当前这一位可以如何由上一位转移过来#include<bits/stdc++.h>us.原创 2021-09-26 21:45:20 · 263 阅读 · 0 评论 -
数位DP 送分了QAQ
数位DP的一道板子题链接:https://ac.nowcoder.com/acm/problem/15035来源:牛客网 杭州人称傻乎乎的人为62,而嘟嘟家这里没有这样的习俗。 相比62,他那里的人更加讨厌数字38,当然啦,还有4这个 数字!所以啊,嘟嘟不点都不想见到包含38或者4的数字。 每次给出一个区间[n,m],你能找到所有令人讨厌的数字吗?记下来就好了:#include<bits/stdc++.h>using namespace std;c原创 2021-09-26 19:50:00 · 116 阅读 · 0 评论 -
郊区春游 状态压缩DP解决TSP问题
链接:https://ac.nowcoder.com/acm/problem/16122来源:牛客网示例1输入复制4 6 32 3 41 2 42 3 34 3 11 4 14 2 23 1 6输出复制3废话不多说,直接上模板我们先借助Floyd预处理出所有点之间的最短路f[st][i]表示状态为st,最后一个点走的是i的最小花费的方案状态转移方程为f[st][i]=min(f[st][i],f[st'][j]+g[R[j]][R[i]])其中st'=st-(1.原创 2021-09-25 17:21:51 · 88 阅读 · 0 评论 -
牛牛种小树
链接:https://ac.nowcoder.com/acm/contest/11179/D来源:牛客网题目描述牛牛最近在学数据结构。他打算用他得到的米粒去构造一棵有n个节点的树,并使得它的价值最大。设f(d)表示树上度数为d的一个点能够获取的最大价值。则这棵树的价值为∑i=1nf(di),其中di表示第i个点的度数。 \sum_{i=1}^nf(d_i),其中d_i 表示第i个点的度数。i=1∑nf(di),其中di表示第i个点的度数。刚刚比赛做到了这道题,卡了一个小时后来仔细一原创 2021-09-24 22:34:24 · 83 阅读 · 0 评论 -
[ZJOI] 物流运输
题目描述https://ac.nowcoder.com/acm/contest/20601/BRT输入样例:5 5 10 81 2 11 3 31 4 22 3 22 4 43 4 13 5 24 5 242 2 33 1 13 3 34 4 5输出样例:32最短路预处理+简单DP刚拿到这道题的时候,嗯,离散的条件下的最小值,想到了动态规划;一开始想有可能是状态压缩,因为(1<<18)*100并没有爆内存,后来想想有更简单的方法就是从集合的角度原创 2021-09-23 18:08:10 · 91 阅读 · 0 评论 -
AtCoder Beginner Contest 219 D - Strange Lunchbox
第一眼看出是一道动态规划,只不过限制状态有两层f[i][j][k]表示前i个物品第一个约束条件取j个第二个约束条件取k个的最小方案然后可以仿照背包问题将i那一维给删掉,其实删不删空间都够状态转移方程:注意这里是至少,因此转移方程为f[j][k]=min(f[j][k],f[max(0,j−a[i].x)][max(0,k−a[i].y)]+1)f[j][k]=min(f[j][k],f[max(0,j-a[i].x)][max(0,k-a[i].y)]+1)f[j][k]=min(f[j][.原创 2021-09-18 22:08:35 · 299 阅读 · 0 评论 -
[USACO 2008 Jan G]Cell Phone Network
链接:https://ac.nowcoder.com/acm/problem/24953来源:牛客网Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to set up cell phone towers on his N (1 ≤ N ≤ 10,000) pastures (c原创 2021-09-17 23:55:47 · 248 阅读 · 0 评论 -
Rinne Loves Edges
链接:https://ac.nowcoder.com/acm/problem/22598来源:牛客网Rinne 最近了解了如何快速维护可支持插入边删除边的图,并且高效的回答一下奇妙的询问。她现在拿到了一个 n 个节点 m 条边的无向连通图,每条边有一个边权 w_i现在她想玩一个游戏:选取一个 “重要点” S,然后选择性删除一些边,使得原图中所有除 S 之外度为 1 的点都不能到达 S。定义删除一条边的代价为这条边的边权,现在 Rinne 想知道完成这个游戏的最小的代价,这样她就能轻松到达 r原创 2021-09-16 23:45:16 · 99 阅读 · 0 评论 -
树上子链 -树的直径
链接:https://ac.nowcoder.com/acm/problem/202475来源:牛客网输入复制52 -1 -1 -2 31 22 32 42 5输出复制4说明样例中最大子链为1 -> 2 -> 5相当于是在一棵树中找到一条边权和最大的树有一种方法是:跑两遍dfs,第一遍取任意一点找到最长的链,取 链中离选取点最远的点再跑一遍dfs即可,但是此方法无法处理负边权。因此我是用第二种方法:树形DP第二种方法:任取一个点,找到这个边延伸到的所有点.原创 2021-09-16 22:07:10 · 66 阅读 · 0 评论 -
田忌赛马 - 动态规划
Here is a famous story in Chinese history.“That was about 2300 years ago. General Tian Ji was a high official in the country Qi. He likes to play horse racing with the king and others.”“Both of Tian and the king have three horses in different classes, na原创 2021-09-14 23:07:16 · 1080 阅读 · 0 评论 -
动态规划之单调队列优化与斜率优化
单调队列优化DP划定区间取值问题对于长度为l的区间,每s长度至少有一个数被取,使用动态规划f(i)表示选第i个数的最小方案集合划分:可以取i-s+1到i-1的各种方式因此f[i]=w[i]+min(f[i-m+1],....,f[i-1])对于后面这一段min(f[i-m+1~i-1])可以使用单调队列优化。凸包优化DP(斜率优化)KaTeX parse error: Undefined control sequence: \ at position 65: …-C_j) \} \原创 2021-07-26 16:52:59 · 340 阅读 · 0 评论 -
有依赖的背包问题 树形DP
有 N 个物品和一个容量是 V 的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。如下图所示:如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。每件物品的编号是 i,体积是 vi,价值是 wi,依赖的父节点编号是 pi。物品的下标范围是 1…N。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品个数和背包容量。原创 2021-08-31 19:26:19 · 96 阅读 · 0 评论 -
动态规划之背包问题
动态规划之背包问题背包模型Dp{ 状态表示{ 集合{ 表示的是所有选法 满足条件条件{ 1.只从前i个物品中选 2.总体积<=j } } 属性 Min,Max,数量 } 状态计算 集合划原创 2021-07-14 09:40:59 · 60 阅读 · 0 评论 -
背包问题求具体方案
背包问题求具体方案有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 字典序最小的方案。这里的字典序是指:所选物品的编号所构成的序列。物品的编号范围是 1…N。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一行,包含若原创 2021-08-31 22:30:43 · 66 阅读 · 0 评论