題目描述
相信大家都學過揹包問題了吧,那麼現在我就考大家乙個問題。有n個物品,每個物品有它的重量w,價值v,現在有乙個容量為w的揹包,問你在不超過揹包容量的情況下,能裝下的物品的最大價值是多少。
t <= 100代表樣例數
1 <= n <= 100 物品數
1 <= w <= 100000 揹包的容量
1 <= wi <= 100000 每個物品的重量
對於每個i=2,3,…,n, w1 ≤ wi ≤ w1+3.
1 <= vi <= 100000 每個物品的價值
輸入輸入格式:
t n w
w1 v1
w2 v2
: wn vn
輸出輸出佔一行,代表最大能裝下物品的價值。
樣例輸入
2 4 6
2 1
3 4
4 10
3 4
4 6
2 1
3 7
4 10
3 6
樣例輸出
11 13
不會寫,看的題解然後才寫出來。
因為 cost 最多在四個層次,我們可以暴力(不過姿勢不優雅也過不去)
**
#include
#define ll long long
using
namespace
std;
const
int maxn = 100+10;
const
int maxm = 1e5;
int a[maxn],b[maxn],c[maxn],d[maxn];
int aa[maxn],bb[maxn],cc[maxn],dd[maxn];
mapmp;
bool cmp(int a,int b)
int main()
if(mp[cost]==1) a[++asiz]=val;
else
if(mp[cost]==2) b[++bsiz]=val;
else
if(mp[cost]==3) c[++csiz]=val;
else d[++dsiz]=val;
}// puts("**********=");
a[0]=num[1];b[0]=num[2];c[0]=num[3];d[0]=num[4];
// for(int i=1;i<=4;i++) printf("%d ",num[i]);
sort(a+1,a+1+asiz,cmp); // 排序很有必要,仔細想想就明白了
sort(b+1,b+1+bsiz,cmp);
sort(c+1,c+1+csiz,cmp);
sort(d+1,d+1+dsiz,cmp);
// puts("**********=");// 這裡打的字首表,因為後面要用到前幾個物品要用多少錢
aa[1]=a[1];bb[1]=b[1];cc[1]=c[1];dd[1]=d[1];
for(int i=2;i<=asiz;i++) aa[i]=aa[i-1]+a[i];
for(int i=2;i<=bsiz;i++) bb[i]=bb[i-1]+b[i];
for(int i=2;i<=csiz;i++) cc[i]=cc[i-1]+c[i];
for(int i=2;i<=dsiz;i++) dd[i]=dd[i-1]+d[i];
int maxval=-1;
for(int i=0;i<=asiz;i++) }}
}}
printf("%d\n",maxval);
}return
0;}
簡單01揹包 完全揹包
01揹包問題 有n個重量和價值分別為wi,vi的物品。從這些物品中挑選出總重量不超過w的物品,求所有挑選方案中價值總和的最大值。1 n 100 1 wi,vi 100 1 w 10000 第一行輸入n的值 接下來n行輸入wi,vi 最後一行輸入w for example input 2 31 2 3...
揹包九講 簡單揹包
揹包問題是一種動態規劃演算法的衍生問題。它可以被看作一種獨立的題型,也可以看作是一種線性動態規劃。學好揹包 學會揹包,對於深入理解動態規劃演算法有著極大的好處,並能幫助理解一些更深層次的動態規劃問題。那麼就開始吧 題目型別 有 n 件物品和乙個容量為 v 的揹包。第 i 件物品的費體積是 v i 價...
簡單0 1揹包
第一次部落格求不噴不噴不噴!有乙個容量為v的揹包,要裝進n個物品,第i個物品的費用為ci,價值為wi,要怎樣選擇才可以使花費不超過揹包容量的同時包裡的總價值最大?每個物品只能放一次 當時剛接觸c 的我剛拿到題目就蒙逼了 如果乙個乙個列舉的話有很多種組合,想想心都累。所以就要利用動態規劃思想。什麼是動...