随笔分类 -  DP

摘要:多重背包优化 二进制拆分 18个物品可以拆成1,2,4,8,3倍物品,这样5个物品任意取可以得到1~18个物品的所有方案。 时间复杂度是$O(nWlogP)$,P是一种物品的最大数量 #include <bits/stdc++.h> using namespace std; const int ma 阅读全文
posted @ 2021-03-26 16:58 UCPRER 阅读(89) 评论(0) 推荐(0)
摘要:数位DP模板 //求l~r所有数的数位和之和 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e9+7; int a[25],len; int dp[25][2][200]; int 阅读全文
posted @ 2020-11-18 16:33 UCPRER 阅读(118) 评论(0) 推荐(0)
摘要:题意 : n个工程,m个研究员,每个工程需要Ci个领域(X1,X2..Xci)的研究员 ,每个研究员会Di个不同的领域(X1,X2..Xdi),要完成一个工程必须使得分配给这个工程的研究员覆盖了这个工程所需的所有领域。问如何分配研究员可以使能供完成的工程数最多? n,m3的方案可以舍弃(一定不是最优 阅读全文
posted @ 2019-10-23 20:23 UCPRER 阅读(268) 评论(0) 推荐(0)
摘要:http://codeforces.com/gym/101206/attachments 题意: T组输入,每组给出m,n,k,m为能量总数,n为水晶种类数,k为合成方案数。有的水晶可以用能量制造,有的水晶不行,有的水晶可以通过其他水晶合成。每种水晶都有固定的价格。给出部分水晶的造价,所有水晶的价格 阅读全文
posted @ 2019-10-23 14:21 UCPRER 阅读(266) 评论(0) 推荐(0)
摘要:题意 : 给定数组a[n],用两种操作: 1.将数组中所有值为x的数移至开头 2.将数组中所有值为x的数移至末尾 问,经过最少多少次操作,能将数组a[n]变为非递减的有序数列? (1 using namespace std; const int maxn=3e5+5; int a[maxn],lis 阅读全文
posted @ 2019-10-16 14:55 UCPRER 阅读(215) 评论(0) 推荐(0)
摘要:题意 : 定义:设M为数组a的子集(元素可以重复),将M中的元素排序,若排序后的相邻两元素相差不超过2,则M为a中的一个块,块的大小为块中的元素个数 给出长度为n的数组a,1 using namespace std; const int maxn=105; int a[maxn]; int dp[m 阅读全文
posted @ 2019-10-08 09:50 UCPRER 阅读(171) 评论(0) 推荐(0)