lightoj 1125【背包·从n个选m个】】的更多相关文章

题意: 给你 n 个背包,然后给你两个数,D,M,问你从n个里面挑M个出来,有多少种方法能够整除D: 思路: 试想我先不挑M个出来的话,仅仅是构造一个D的倍数,其实就是构造一个数的话, 其实就是个递推,然后方案的叠加 挑M个,D的倍数. 能对M个状压: 但是对于D的倍数呢? 其实就是取膜就好了,比如5的倍数, 那么dp[个数][j]+=dp[个数-1][j-X];(个数都是状压了) 但是现在是200个里面挑10个啊... 不行的话就再加一维. 所以还是要从前 i 个物品推过来... 所以现在可以…
题意: 从n个数里选出m个来,还要使得这m个数之和被d整除. 给一个n和q,再给n个数,再给q个询问,每个询问包含两个数,d,m; 对于每个case输出每个q个询问的可行的方案数. 思路: 每个数只能被取一次 那我直接dp一下,dp[i][j]直接代表前i个物品有j值: 然后j这个值由2^31*200-这就不行了... 虽然可以/d 变变变!!! 但是我们可以把余数开一维啊,然后还是前i个物品开一维,但是还有选几个再开一维,那就开三维了... 01背包开两维反着更新一下就好了. dp[i][j]…
I love sneakers! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3265    Accepted Submission(s): 1337 Problem Description After months of hard working, Iserlohn finally wins awesome amount of sc…
Given a list of N numbers you will be allowed to choose any M of them. So you can choose in NCM ways. You will have to determine how many of these chosen groups have a sum, which is divisible by D. Input Input starts with an integer T (≤ 20), denotin…
hdu1011 http://acm.hdu.edu.cn/showproblem.php?pid=1011 给定n个洞穴和m个士兵(每个士兵能消灭20个bugs) 然后给定每个洞穴的bugs数量(背包的费用)和brain的数量(背包的价值) 然后给定n-1条边,使得n个洞穴形成一课树 问能取得的brain数量的最大值. 思路:其实就是在树上面进行背包问题的求解,只不过是有依赖的背包(儿子要选,当且仅当父亲也被选) 普通的01背包是这样 for(i=每件物品) for(j=每个容量) dp[i]…
题目链接 很明显的一道完全背包板子题,做法也很简单,就是要注意 这里你可以买比所需多的干草,只要达到数量就行了 状态转移方程:dp[j]=min(dp[j],dp[j-m[i]]+c[i]) 代码如下: #include<cstdio> #include<iostream> #include<cstdlib> #include<iomanip> #include<cmath> #include<cstring> #include<…
题目链接: http://poj.org/problem?id=1112 Team Them Up! Time Limit: 1000MSMemory Limit: 10000K 问题描述 Your task is to divide a number of persons into two teams, in such a way, that: everyone belongs to one of the teams; every team has at least one member; e…
题意:就是给定n个点,每个地点有value[i]的宝物,而且有的宝物必须是另一个宝物取了才能取,问取m个点可以获得的最多宝物价值. 一个子节点就可以返回m个状态,每个状态表示容量为j(j<=m)时选最多的宝物,而一个子节点中只可以选择一个状态进行转移,每个节点有若干个子节点,问题就转换为分组背包,几个子节点就是几个分组背包,体积是选几个地点,价值是宝物价值. 状态转移方程: dp[v][1] = Money[v]; (v为叶子节点)                    dp[v][j] = m…
1068. Find More Coins (30) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Eva loves to collect coins from all over the universe, including some other planets like Mars. One day she visited a universal shopping mall which could ac…
问题:有一课含有n(n<=2e5)个结点的数,有m(m<=1000)个结点是红色的,其余的结点是黑色的.现从树中选若干数量的结点,其中红色的恰有k个,并且每个结点都不是其他任何另一个结点的后代,分别求出k=0,1,2,...,m的选法种数.(树根为1) 又是一道树形背包问题.只不过这个问题和普通的树形背包正好相反,选了一个结点就不能选它的祖先,但解法都是差不多的. 设dp[u][i]为在第u个结点及其子树下,红色结点数恰为i个的选法总数,则dp[u]为它的所有子结点的dp值构成的多项式的乘积加…
题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少. 输入输出格式 输入格式: 两个数m,n,表示一共有n件物品,总重量为m 接下来n行,每行3个数ai,bi,ci,表示物品的重量,利用价值,所属组数 输出格式: 一个数,最大的利用价值 输入输出样例 输入样例#1: 45 3 10 10 1 10 5 1 50 400 2 输出样例…
抽空看了一段时间的粒子群算法,这里仅针对其应用于动态规划中的背包问题的情况做下总结归纳,其他应用可以之后想到了再添加. 一:分组背包问题简介 假设有3个组,每组有2个物品,每种物品有3种属性,价值.体积和重量.我们只有1个背包,从每组中选择1个物品(可以不选的情况第三章讨论)装入背包中,如何选择才能使背包中的物品总价值最大.总体积最小.且不超过规定重量呢? 物品/分组 第一组 第二组 第三组 物品1价值 1 2 3 物品2价值 3 2 1 物品/分组 第一组 第二组 第三组 物品1体积 1 2…
Divisible Group Sums Given a list of N numbers you will be allowed to choose any M of them. So you can choose in NCM ways. You will have to determine how many of these chosen groups have a sum, which is divisible by D. Input Input starts with an inte…
多重背包问题: 有n件物品,第i件价值为wi,质量为vi,有c1件,问,给定容量V,求获得的最大价值. 朴素做法: 视为0,1,2,...,k种物品的分组背包 [每组只能选一个] f[i][j]=Max(f[i][j-k*v[i]]+k*w[i]) 但是i,j,k都要枚举,复杂度为 n*V*k 朴素做法的改进: 因为发现用二进制可以表示1..k之内的所有数 [整数二进制打开后为01串,所以可以被二进制表示] 所以将k个物品拆分成1,2,4...2^m,k-2^m   ( 其中2^m<=k<2^…
为什么喜欢Kindle 有朋友问为什么那么多人喜欢用Kindle,作为刚入手一台Kindle PaperWhite 2 的人, 我想说:这个东西,应该算今年我买的最值得的设备了.它的好处太多了:1:轻薄,比一本杂志都轻,方便携带.如果让你选择一样东西放你上下班背包里,是 选一本杂志呢还是会选择一本英汉大字典?2:容量大,日版的KPW2有4G内存,除去系统占用的几百M,留给书籍的有3G多,大 概可以放6000~9000本英汉大字典这样容量的书3:电子显示效果好,好到想要流泪的程度,没有体验过的最好…
题目链接: http://poj.org/problem?id=1170 题目意思: 购物车里有b种(0=<b<=5)物品,每种物品告诉物品代号c(1=<c<=999),数量为k(1=<k<=5),单价为p.超时有s种优惠方案,每种优惠方案包含n种物品,告诉这n种物品的代号和数量以及打包后的优惠价格.求把购物车的东西买完,最少的花费. 解题思路: 离散化+状态压缩dp+背包. 因为总的物品种数最多只有5种,而且每种物品的数量最多只有5,所以可以用状态压缩处理.六进制压缩…
hdu 2196 http://acm.hdu.edu.cn/showproblem.php?pid=2196 input 5//5个结点 1 1//表示结点2到结点1有一条权值为1的边 2 1//表示结点3到结点2有一条权值为1的边 3 1 1 1 要我们求从任意结点出发的最长路径. 思路:一棵树上从某个结点出发的最长路径,肯定是①从该结点出发经由子树到大叶子结点.②从该结点出发经由父结点,然后到大叶子结点.      这两者中的最大者 ①可以用一遍dfs求出任意结点到叶子结点的最大值. ②也…
看了一个多星期状压DP,总算有点明白,大概可以分为两种:数据是在矩阵中的,数据是线性的,在矩阵中的一般就是排兵布阵这一种的,还有一种线性结构中给定条件让你求最大权值,比如求最大权值路线,TSP问题等,前一种的状态比较好想,一般就是有了第一行的状态然后推下一行的状态,i行的状态一般由i-1行的状态推出,状态转移好想,在这里有两种排兵布阵,一是共有多少种排法,另一种是最多能排多少兵,求方案数的一种就是只要找到满足的状态就把这个状态的方案数加上.求最大权值的就是当找到一种状态的时候要考虑这个状态取了还…
P1507 NASA的食物计划 题面 每个物品有三个属性,"所含卡路里":价值\(v\),"体积":限制1\(m_1\),以及"质量":限制2\(m_2\),在n件物品中选择一部分,使得所选物品价值\(v\)之和最大. 同时要求这些物品的限制1\(m_1\)之和不超过限制1上限\(c_1\),限制2\(m_2\)之和不超过限制2上限\(c_2\). 格式 输入包括n+2行. 第一行包括两个整数\(c_1,c_2(c_1,c_2<400)\)…
[BZOJ4247]挂饰(动态规划) 题面 BZOJ 题解 设\(f[i][j]\)表示前\(i\)个物品中还剩下\(j\)个挂钩时的最大答案. 转移显然是一个\(01\)背包,要么不选:\(f[i][j]\rightarrow f[i-1][j]\) 要么选,那么首先这个物品至少要占用一个挂钩,然后它会贡献\(a[i]\)个挂钩,事实上如果\(a[i]\)之和太大那么和\(n\)没有区别,所以\(f[i][j]\rightarrow f[i-1][max(j-a[i],0)+1]+b[i]\)…
今天讲的全是dp... 不多废话,先看一道经典的模板LIS(最长不下降子序列) 一.LIS 给定一个长度为N的数列,求最长上升子序列 例:1 7 2 8 3 4 答案:1 2 3 4 代码: #include <bits/stdc++.h>//突然想用万能库 using namespace std; ; int n, data[maxn], dp[maxn], from[maxn];//方案 void output(int x) { if(!x) return ; output(from[x]…
优美的dp + 容斥. 首先可以不用考虑数量限制,处理一个完全背包$f_{i}$表示用四种面值的硬币购买的方案数,对于每一个询问,我们考虑容斥. 我们的$f_{s}$其实多包含了$f_{s - c_{i} * (d_{i} + 1)}$,所以我们把这些减去(这个式子的意思可以看成把$d_{i} + 1$以上的数全部都删掉做一个完全背包,就是只选$d_{i}$个),然而这样多减掉了同时选择两个的,又多加了同时选择三个的…… 写成位运算就很优美啦. 时间复杂度$O(maxS + |s| * 2^{|…
转自:http://blog.csdn.net/a601025382s/article/details/12308193 题意: 输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝石数目无限,问背包里能放下的最大价值? 题解: 看过去很像完全背包,可数据很大(虽然没给出,也能猜到,不然太水了),所以不能用背包求.又只有两种物品,想到了贪心,将价值与体积比大(称为价值比)的优先放入.但体积限制,这样还不可以,还需要枚举减少价值比大的宝石个数,是否可以增大所求价值.又我们可以知道…
题目描述:求n个数中异或值大于m的方案数有多少个? 设状态f[i][j]代表前i个数异或值为j的方案数有f[i][j]种,那么对于j来说要么选第i个数与前面的i-1个数中的某些数构成j,f[i-1][j^a[i]]],要么不选第i个数,直接由前面的i-1个数构成j,f[i-1][j];  f[i][j]=f[i-1][j^a[i]] + f[i-1][j] ; 注意到j的取值范围为10^6约等于2^(20),所以n个数亦或的最大值最多为20个1. 亦或的特性 : 任何数与0相亦或不变 ,任何数与…
背包+fft 既然要不选一个东西,那么我们求出前缀背包和后缀背包,每次答案就是f[i-1][w]*g[i+1][j-w] 但是这样复杂度还是n^3,跑不过,但是我们发现上面那个东西不就是个裸卷积吗,直接上fft,但是wa了... wa的程序,大概是精度问题吧 #include<bits/stdc++.h> using namespace std; #define pi acos(-1) ; int n, m, L, x, nn, mm; ], f[N][N], g[N][N], w[N]; c…
01 背包: 01背包:在M件物品中取出若干件物品放到背包中,每件物品对应的体积v1,v2,v3,....对应的价值为w1,w2,w3,,,,,每件物品最多拿一件. 和很多DP题一样,对于每一个物品,都只有拿或者不拿这两种状态,不拿或者拿不动,dp[i][j]=dp[i-1][j],容量不变,而如果拿的话,为dp[i][j]=dp[i-1][j-w[i]]+v[i]:所以总的来说: dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]) 在二维的写法中,dp[…
什么是真正的dp?有什么特点?怎么来搞. 最近遇到了一些以前的题目发现没有好好的理解就直接写了 大多都是书上的算法并不是自己真正的理解. 1 关于背包 我总结一下 可能 有助于对模型的更快发现 01 背包 一般来说直接使用一个维度直接继承上一层的状态 对于每一个状态我们可以保证其实最优的所以具有最优子结构所以 是正确的. 完全背包 一个物品无限使用所以我们只需要能使用就使用即可不需要管数量. 多重背包 我们把状态转移写出来 其实第一次我是这样做的 把多重背包换成01背包的模型然后复杂度 nmci…
luoguP4383 [八省联考2018]林克卡特树(树上dp,wqs二分) Luogu 题解时间 $ k $ 条边权为 $ 0 $ 的边. 是的,边权为零. 转化成选正好 $ k+1 $ 条链. $ k \le 100 $ 的部分. 毫无疑问是树上打背包dp. 但具体设计还要注意一下. 一个问题是单点成链,这个要特判. 之后由于选择的都是链,所以每个点的度数不会超过2. 这样方程就出来了. $ k \le n $ 的部分. 很明显不能背包了. 但"选正好k个求最大权值和"这个要求如果…
分组背包(至少选一个) 我真的搞不懂为什么,所以现在就只能当作是模板来用吧 如果有大牛看见 希望评论告诉我 &代码: #include <cstdio> #include <bitset> #include <iostream> #include <set> #include <cmath> #include <cstring> #include <algorithm> #include <map> #…
http://lightoj.com/volume_showproblem.php?problem=1079 Just another Robbery As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (he wants everything quick!) so he decided to rob banks. He wants to make a calculated r…