背包
文章平均质量分 57
__yuan__
简单、干净、温暖,便好。
展开
-
01背包 HDU——2546 饭卡
先找出最大价格mx,然后让其他的做01背包,让其总和逼近m-5 如果m>=5 余额为 m-mx-dp[m-5]如果 m将最大数m与最后一位a[n]交换#include#include#include#include#include#include#define maxn 3010using namespace std;int c[maxn],dp[maxn];原创 2015-07-15 14:30:22 · 359 阅读 · 0 评论 -
01背包
题目:有N件物品和一个容量为V的背包,放入第i件物品耗费的空间是ci,得到的价值是wi,求解将哪些物品装入背包可使价值总和最大。特点:每种物品只有一件,可以选择放或不放。状态转移方程:f[i,v]=max(f[i-1,v],f[i-1,v-ci]+wi)如果不放第i件物品,那么问题就转化为前i-1件物品放入剩下容量为v-ci的背包中,价值为f[i-1,v-ci]+wi。o(vn)原创 2015-07-15 11:30:39 · 394 阅读 · 0 评论 -
完全背包 HDU——1114 Piggy Bank
给出空瓶重量和当前重量,给出硬币种类个数n,给出每种硬币的价值和重量,求瓶内至少含有多少钱。#include#include#include#include#includeusing namespace std;#define maxn 11111#define INF 2222222#define ma 600int p[ma],w[ma];int dp[maxn];i原创 2015-07-15 14:52:16 · 289 阅读 · 0 评论 -
多重背包
有N中物品和一个容量为V的背包,第i种物品最多有Mi件可用,每件耗费的空间是ci,价值wi,求解将哪些物品放入背包可使这些物品的耗费空间总和不超过背包容量且价值总和最大。设f[i,j]表示用了前i种物品填满容量为j的背包后,最多还剩下几个第i中物品可用,如果f[i,j]=-1,则说明这种状态不可行,若可行应满足0o(vn): f[0,1...v]=-1 f[0,0]=原创 2015-07-15 14:59:00 · 421 阅读 · 0 评论 -
完全背包 HDU——1248 寒冰王座
有N中物品和一个容量为V的背包,每种物品都有无限件可用,放入第i中物品所占的空间是ci,价值是wi,求解将哪些物品放入背包中可使这些物品的耗费空间总和不超过背包的容量,且价值总和最大。for(i=1;i for(v=ci;v f[v]=max(f[v],f[v-ci]+wi);在01背包中让v递减循环为了保证第i次循环中的状态f[i,v]是由状态f[i-1,v-ci原创 2015-07-15 14:35:34 · 4124 阅读 · 0 评论 -
01背包 HDU——1864 最大报销额
转化为整数扩大100倍处理//*为赋值抑制字符,表示本输入项对应的数据//读入后,不赋给相应的变量 如://scanf("%2d%*2d%3d",&a,&b); printf("%d\n%d\n",a,b); 输入123456789//则系统将读取12并赋给a 读取34但舍掉 读取567并赋给b 所以a=12 b=567//处理好输入后,将值存入f[]中并套用01背包#原创 2015-07-15 14:17:39 · 487 阅读 · 0 评论