随笔 - 532
文章 - 0
评论 - 3
阅读 -
10867
随笔分类 - dp
cf543A
摘要:翻译下题目: n个物品,每种物品有无限个,物品体积,现在一共取m个物品,且物品总体积不超V 问方案个数 纯粹的背包dp,没什么说的 #include <iostream> #include <cstring> using namespace std; const int N=503; int mod
阅读全文
SP283 NAPTIME-Naptime
摘要:一个环上有n个点,价值 a[i],现在要选择m个点, 其中连续段的第一个元素的价值不算,求总和最大? 先考虑一条链 f[i][j][0/1] ,j 是目前选择了的点的个数, 0/1 当前点i 是否选择 状态转移: f[i][j][0]=max(f[i-1][j][0],f[i-1][j][1]) f
阅读全文
luogu 1351
摘要:水题 这里记录个步骤 对某节点x,其子节点为y 求 a[y1]*(a[y2]+a[y3]+ ... +a[yn]) + a[y2]*(a[y1]+a[y3]+...a[yn]) + .... + a[yn]*(a[y1]+a[y2]+...+a[y(n-1)] ) 观察一下,很容易推出 answer
阅读全文
最长单调不增子序列
摘要:普通的dp写法 f[i] = max{ f[j] +1 } j<i &&a[i]<=a[j] 复杂度 O(n^2) 单调队列写法 O(nlogn) int n,a[N],f[N],st[N],len; int cmp(int x,int y){ return x>y; } void solve(){
阅读全文
luogu 1586
摘要:四方定理是众所周知的:任意一个正整数n,可以分解为不超过四个整数的平方和 给定的正整数n,统计它能分解的方案总数。注意:25=4^2+3^2 与 3^2+4^2 相同 背包,把每个平方数作为一个物品 直接用背包会重复累加,此时要利用这个定理,f[4][j] #include <iostream> #
阅读全文
luogu 1077
摘要:一些不同类型的物品,每种物品有可取个数的上限( a[i] ) 从中挑m个,求方案个数 这是背包问题? 考虑前 i 种物品,f[i][j] 表示方案个数, j 表示第i个物品取多少 f[i][j]+= f[i-1][j-k] f[0][0]=1 #include <iostream> using na
阅读全文
luogu 1057
摘要:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目。 有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又
阅读全文
cf414b
摘要:1~M 挑数字(可重复), 能组成多少长度为n的合法序列? ( n,k =2000 合法序列: a[i] %a[i-1]==0 f[i][j] += f[i-1][k] , j%k==0 #include <iostream> using namespace std; const int N=200
阅读全文
luogu 1018
摘要:数字串分割为m个部分,求乘积最大? 例如有一个数字串:312, 当 N=3,K=1 时会有以下两种分法: 3 * 12 31*2 这时,符合题目要求的结果是: 31 *2 转移方程 在注释里,不解释 以下代码只有80分,AC需要换成高精度(笔者大概是没学过的 #include <iostream>
阅读全文
luogu 1049
摘要:有一个箱子容量为 VV,同时有 nn 个物品,每个物品有一个体积。 现在从 nn 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。 #include <iostream> #include <vector> #include <cstring> using name
阅读全文
状态压缩dp的两个经典问题
摘要:这里的图染色问题 : 用最少的颜色给一个无向图的点染色,且相邻节点颜色不同 f[s] = min{ f[s-s2]+1 } ,s2为s的子集 值得注意集合S 的子集如何枚举? for(j=S; j ;j=(j-1)&S) #include <iostream> #include <vector> u
阅读全文
Perfect Service UVA - 1218
摘要:树上的点可以涂成黑色或白色,求最少的黑色点,使得任意白点只和一个黑点相连 白点只和一个黑点相连,所以对于节点x, 不仅考虑 x ,son[x] 的情况,还有 x,father[x] f[x][3] 黑点个数 0: x 为 黑点 1:x为白点,且father[x] 为黑点 2:x 白点,father[
阅读全文
3个经典树上问题
摘要:1.树的最大独立集 任选一个点作为根,有了以下得状态 f[i][0/1] f[i][0] += max(f[y][0], f[y][1] f[i][1] += f[i][0] #include <iostream> #include <vector> using namespace std; con
阅读全文
uva 10003
摘要:#include <iostream> #include <cstring> using namespace std ; const int N=60,inf=1<<30; int n,L,a[N],vis[N][N],f[N][N]; int dp(int l,int r){ if(l>=r-1)
阅读全文
uva 1025
摘要:f[i][j] 在 i 车站,当前经过的时间 j ,所需最小等待时间 f[i][j]= f[i][j+1] +1; //等待 f[i][j]= min{ f[i-1][j+t[j]] } //向右 f[i][j] =min{ f[i+1][j+t[j-1]] } // 向左 #include <io
阅读全文
最大子段和
摘要:(luogu P1115) 方法1 维护前缀和s[i] ,所求的最大和 为 max{ s[j] - s[i] } , i<j 我们枚举j ,即s[j] 确定,此时只需要 s[i] 最小即可 ,于是维护这个最小值 #include <iostream> using namespace std ; co
阅读全文
cf#806G
摘要:题目 There are nn chests. The ii-th chest contains aiai coins. You need to open all nn chests in order from chest 11 to chest nn. There are two types of
阅读全文
cf820G
摘要:操作:从字符串a中扣除给定的子串b(如hebheof 和 he ,结果 --bheof或heb--of 问直到无法操作时,至少需要几次 #include<iostream> #include <vector> #include <cstring> using namespace std; const
阅读全文
cf815C
摘要:题意: 有n件商品,每件有价格c[i],优惠券d[i], 对于i>=2,使用di的条件为:xi的优惠券需要被使用,问初始金钱为b时 最多能买多少件商品? n<=5000 解答 树上背包 f[u][j][0/1] 表示某子树(u)有体积j(分配的物品数目) ,该物品是否选择,所需要的最小金钱 f[u]
阅读全文
知识 树上背包
摘要:例子: luogu <选课> 课程有依赖关系形成树状结构,每个节点有价值a[i], 若选择X节点 则必须选择其父节点,最多选m个节点 问能获得的最大价值 f[u][i][j] 结点u,可用体积为j(节点个数),考虑前i个子节点,能获得的最大价值 我们枚举第i个点分配的体积k f[u][i][j]=
阅读全文