背包模板

 1 //每件物品只能使用一次
 2 void onezeropack(int v,int c)
 3 {
 4     int j;
 5     for(j=val; j>=v; j--)
 6     {
 7         f[j]=max(f[j-v]+c,f[j]);
 8     }
 9 }
10 //每件物品可以无限使用
11 void completepack(int v,int c)
12 {
13     int j;
14     for(j=v; j<=val; j++)
15     {
16         f[j]=max(f[j-v]+c,f[j]);
17     }
18 }
19 //每件物品有限次使用
20 void multiplepack(int v,int c,int num)
21 {
22     if(c*num>=val)
23     {
24         completepack(v,c);
25         return;
26     }
27     int k=1;
28     while(k<num)
29     {
30         onezeropack(k*v,k*c);
31         num=num-k;
32         k=k*2;
33     }
34     onezeropack(num*v,num*c);
35 }

注意 : 背包的第一重循环要自己写

for(int i = 0 ;i < n ; i++)  

调用其中一个函数

f[N]为dp数组

时间: 2024-10-12 21:13:14

背包模板的相关文章

1085 背包问题(0-1背包模板题)

1085 背包问题(0-1背包模板题)(51NOD基础题) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价值. Input 第1行,2个整数,N和W中间用空格隔开.N为物品的数量,W为背包的容量.(1 <= N <= 100,1 <= W <= 10000) 第2 - N + 1行,每行

D. Arpa&#39;s weak amphitheater and Mehrdad&#39;s valuable Hoses 分组背包模板题

http://codeforces.com/problemset/problem/742/D 并查集预处理出所有关系. 一开始的时候,我预处理所有关系后,然后选择全部的时候,另起了一个for,然后再判断. 这样是不对的.因为这样使得同一组里面可能选择了两次. 3 0 2 1 2 3 1 1 3 #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include &

01背包 模板1 2 总结

物品质量 w[0] w[1]  w[2] ....... w[n]                背包容量c               T 物品价值 v[0]  v[1]  v[2]  .......  v[n]              物品种类 n                N (一)设DP(x,y)   表示  从前x项物品中  取出装入  体积为y的背包 的  物品的最大价值. 前x项物品(0---- x-1 , X)   去装          体积容量为y的背包 |------

01背包模板、全然背包 and 多重背包(模板)

转载请注明出处:http://blog.csdn.net/u012860063 贴一个自觉得解说不错的链接:http://www.cppblog.com/tanky-woo/archive/2010/07/31/121803.html 模版就直接贴代码: 01背包模板: /* 01背包问题 01背包问题的特点是,">每种物品仅有一件.能够选择放或不放. 01背包问题描写叙述: 有N件物品和一个容量为V的背包. 第i件物品的重量是c[i],价值是w[i]. 求解将哪些物品装入背包可使这些物品

hihocoder第七周 完全背包模板题

时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 等等,这段故事为何似曾相识?这就要从平行宇宙理论说起了………总而言之,在另一个宇宙中,小Ho面临的问题发生了细微的变化! 小Ho现在手上有M张奖券,而奖品区有N种奖品,分别标号为1到N,其中第i种奖品需要need(i)张奖券进行兑换,并且可以兑换无数次,为了使得辛苦得到的奖券不白白浪费,小Ho给每件奖品都评了分,其

01背包 模板1

// 0-1背包问题的普通递归算法#include <stdio.h>#define M 10int w[M]={5,3,2,1},v[M]={4,4,3,1};int limit_w=7,maxv=0,n=4; void find(int i,int tw,int tv) //从第i种物品开始,当前已有的重量tw和价值tv{ if (i<n) //进入第i+1件的条件,还没有选完n种物品 if (tw+w[i]<=limit_w ) //选择第i件物品 find(i+1,tw+w

01背包模板

转载请注明出处:http://blog.csdn.net/u012860063 模版就直接贴代码: 01背包问题 01背包问题的特点是,每种物品仅有一件,可以选择放或不放. 01背包问题描述: 有N件物品和一个容量为V的背包.第i件物品的重量是c[i],价值是w[i]. 求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大. #include <stdio.h> int max(int x,int y) { int M; M=x>y ? x : y; return

多重背包模板

/** * 多重背包: * 有N种物品和一个容量为V的背包.第i种物品最多有Mi件可用, * 每件耗费的空间是Ci,价值是Wi. * 求解将哪些物品装入背包可使这些物品的耗费的空间总和不超过背包容量,且价值总和最大. */ #include <stdio.h> #include <string.h> int max(int a, int b){ if (a > b)return a; return b; } #define maxn 100005 int c[maxn], w

2019ACM-ICPC沈阳网络赛-C-Dawn-K&#39;s water(完全背包模板题)

Dawn-K's water  1000ms 262144K Dawn-K recently discovered a very magical phenomenon in the supermarket of Northeastern University: The large package is not necessarily more expensive than the small package. On this day, Dawn-K came to the supermarket

HDU 2844 多重背包模板

给出n个数和m 每个数给出出现次数和价值,问任意组合组成不大于M的价值,共能产生多少个数 多重背包的的二进制优化写法  模板mark一下 二进制优化原理: 1.2.4可以组合出所有小于8的数: 1.2.4.8可以组合出所有小于16的数: 1.2.4.8.16可以组合出所有小于32的数: -- #include "stdio.h" #include "string.h" int n,m; int dp[100010]; void complete_pack(int v