hautoj 1279 簡單的揹包問題

2021-08-05 18:30:11 字數 1867 閱讀 7057

題目描述

相信大家都學過揹包問題了吧,那麼現在我就考大家乙個問題。有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 的我剛拿到題目就蒙逼了 如果乙個乙個列舉的話有很多種組合,想想心都累。所以就要利用動態規劃思想。什麼是動...