Wikioi 1025 01揹包變形

2021-06-22 00:09:01 字數 1087 閱讀 9787

這題多加了菜品必選編號,所以剛開始不知道怎麼寫,原來就把必選的處理下就行了,因為有重複,但是相同的價值與**都一樣,所以這裡就直接挑出來就行了。

把不是必選的在裡面用dp即可,dp之前也要把重複的捨去。

因為總**容量為浮點數,所以先乘以10變成整數就可以用01揹包了。

#include #include #include #include #include #include #include #include #include #include #include #include #define pi acos(-1.0)

#define mem(a,b) memset(a,b,sizeof(a))

#define sca(a) scanf("%d",&a)

#define sc(a,b) scanf("%d%d",&a,&b)

#define pri(a) printf("%d\n",a)

#define lson i<<1,l,mid

#define rson i<<1|1,mid+1,r

#define mm 204

#define mn 1008

#define inf 2000000000

#define eps 1e-8

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

int dp[1005];

int n,k,i,j,v,a,b,p[1005],w[1003],p1[1005],w1[1003];

int vis[1005],kind[1005],sum,cnt;

int main()

for(i=1; i<=n; i++)

if(kind[i]&&!vis[kind[i]])

vis[kind[i]]=1,p1[++cnt]=p[i],w1[cnt]=w[i];

for(i=1; i<=cnt; i++)

for(j=v; j>=p1[i]; j--)

dp[j]=max(dp[j],dp[j-p1[i]]+w1[i]);

cout<

wikioi 1014 裝箱問題 揹包)

有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30 每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。乙個整數v,表示箱子容量 乙個整數n,表示有n個物品 接下來n個整數,分別表示這n 個物品的各自體積 乙個整數,表示箱子剩餘空間。1 ...

wikioi 3130 CYD刷題 揹包)

下午,cyd要刷題了,已知cyd有n題可刷,但他只有m分鐘的時間,而且他的智慧型值為q,也就是說他只能做出難度小於等於q的題目。已知每題可得積分ai,需花費時間bi,難度為ci,問cyd最多可得多少積分。n m q ai bi ci 可得最多積分 4 20 10 20 3 7 30 7 9 30 1...

01揹包變式 要求恰好裝滿的01揹包

ktv裡面有n首歌曲你可以選擇,每首歌曲的時長都給出了.對於每首歌曲,你最多只能唱1遍.現在給你乙個時間限制t t 10 9 問你在最多t 1秒的時間內可以唱多少首歌曲num 且最長唱歌時間是多少time time必須 t 1 最終輸出num 1 和 time 678 即可.注意 你需要優先讓歌曲數...