随笔分类 - 动态规划—dp
摘要:参考:http://hzwer.com/3099.html 神题神题 其实只要知道思路就有点都不难…… 先对每一行dp,设g[i][j]为这行前i个格子粉刷了k次最大粉刷正确数,随便n^3一下就行 设f[i][j]为前i行刷了k次的最大正确数,这个用g更新即可,像背包一样 cpp include i
阅读全文
摘要:设f[i]为i为牡牛的方案数,f[0]=1,s为f的前缀和,f[i]=s[max(i k 1,0)] cpp include include using namespace std; const int N=100005,mod=5000011; int n,m,f[N],s[N]; int mai
阅读全文
摘要:同1801 注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了
阅读全文
摘要:先从后到前做一个最长下降子序列的dp,记录f[i],我这里用的是二分(其实树状数组比较显然) 然后对于询问,超出最长上升子序列的直接输出;否则从前到后扫,f[i] =x&&a[i] la(上个选的)就选,因为这时第一个出现的一定是符合条件的中最小的最小的
阅读全文
摘要:设f[i][j]表示数列到i为止最后一项第j位为1的最大子序列长度,每次从i 1中1 include using namespace std; int n,f[35],ans; int read() { int r=0,f=1; char p=getchar(); while(p '9'||p='0
阅读全文
摘要:先tarjan缩成DAG,然后答案就变成了最长链,dp的同时计数即可 就是题面太唬人了,没反应过来
阅读全文
摘要:参考:https://blog.csdn.net/sunshinezff/article/details/51049132 非典型数位dp 首先预处理,设f[i][j]为以0开头的i位数中1的个数为j的数的数量,g[i][j]为以1开头的i位数中1的个数为j的数的数量;转移是 f[i][j]=f[i
阅读全文
摘要:设[f[i][j]为1到i,开头数字是j并且是山峰的方案数 注意到当数字j和j 1不相邻时,交换它们会得到一个新的符合要求的序列,所以f[i][j]+=f[i][j 1]; 如果相邻,那么j是山峰,j 1是山谷,这样就是求1到i 1,开头数字是j 1并且是山谷的方案数,也就是f[i][j]+=f[i
阅读全文
摘要:对于第一问二分然后贪心判断即可 对于第二问,设f[i][j]为已经到j为止砍了i段,转移的话从$$ f[i][j]=\sigema f[k][j 1] (s[j] s[k 1] include using namespace std; const int N=50005,mod=10007; int
阅读全文
摘要:设f[i][j]为掉到f[i][j]时的概率然后分情况随便转移一下就好 主要是要手写分数比较麻烦 cpp include include using namespace std; const int N=55; int n,m; char a[N][N]; long long gcd(long lo
阅读全文
摘要:注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了
阅读全文
摘要:完了不会dp了 设f[i][j]为以i结尾,有j个时的最优值,辅助数组g[i][j]为s选了i和j,i~j中的误差值 转移是f[j][i]=min(f[k][i 1]+g[k][j]) cpp include include include using namespace std; const lo
阅读全文
摘要:废了废了,一个小dp都想不出来 把c数组倒序一下,变成1在最下,设f[i][j]为某一人取完j个之后还剩1~i的硬币,转移的话应该是f[i][j]=max(s[i] f[i k][k]),就是1~n的硬币价值和减去上一手能拿到的最大值,但是这样一来就是O(n^3)的了 仔细观察发现f[i][j]和f
阅读全文
摘要:不知道该叫贪心还是dp 倒着来,记f[0][i],f[1][i]分别为先手和后手从n走到i的最大值。先手显然是取最大的,当后手取到比先手大的时候就交换 cpp include include using namespace std; const int N=700005; int n,a[N],w=
阅读全文
摘要:i的初始化写成2了于是成功查错2h……怕不是个傻子 设f[i][j]为第i根高为j,转移是 $$ f[i][j]=min(f[i 1][k]+abs(k j) c+(j h[i])^2)(j =h[i],k =h[i 1]) $$ 时间复杂度是1e5\ 1e2\ 1e2,空间复杂度是1e5\ 1e2
阅读全文

浙公网安备 33010602011771号