日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codevs 3269 混合背包

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codevs 3269 混合背包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3269 混合背包

??時間限制: 1 s    空間限制: 256000 KB    題目等級 : 鉆石 Diamond

題目描述?Description

背包體積為V ,給出N個物品,每個物品占用體積為Vi,價值為Wi,每個物品要么至多取1件,要么至多取mi件(mi > 1) , 要么數量無限 , 在所裝物品總體積不超過V的前提下所裝物品的價值的和的最大值是多少?

輸入描述?Input Description

第一行兩個數N,V,下面N行每行三個數Vi,Wi,Mi表示每個物品的體積,價值與數量,Mi=1表示至多取一件,Mi>1表示至多取Mi件,Mi=-1表示數量無限

輸出描述?Output Description

1個數Ans表示所裝物品價值的最大值

樣例輸入?Sample Input

2 10

3 7 2

2 4 -1

樣例輸出?Sample Output

22

數據范圍及提示?Data Size & Hint

對于100%的數據,V <= 200000 , N <= 200

1 // 混合背包板子 我的哥 全TLE~~~~~~~~ 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 #define N 210 7 #define V 200010 8 int n,v,f[V],wi[N],mi[N],vi[N]; 9 int main() 10 { 11 scanf("%d%d",&n,&v); 12 for(int i=1;i<=n;i++) 13 { 14 scanf("%d%d%d",&vi[i],&wi[i],&mi[i]); 15 if(mi[i]==-1) mi[i]=v/vi[i]; 16 } 17 for(int i=1;i<=n;i++) 18 { 19 for(int k=1;k<=mi[i];k++) 20 { 21 for(int j=v;j>=vi[i];j--) 22 f[j]=max(f[j],f[j-vi[i]]+wi[i]); 23 } 24 } 25 printf("%d",f[v]); 26 return 0; 27 }

AC代碼:

1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 #define N 210 6 #define V 200010 7 int n,v,f[V],wi[N],mi[N],vi[N]; 8 int main() 9 { 10 scanf("%d%d",&n,&v); 11 for(int i=1;i<=n;i++) 12 { 13 scanf("%d%d%d",&vi[i],&wi[i],&mi[i]); 14 if(mi[i]==-1) mi[i]=v/vi[i]; 15 } 16 for(int i=1;i<=n;i++) 17 { 18 int x=mi[i]; 19 for(int k=1;k<=x;k<<=1)//二分制優化 20 { 21 for (int j=v;j>=vi[i]*k;j--) 22 f[j]=max(f[j],f[j-vi[i]*k]+wi[i]*k); 23 x-=k; 24 } 25 if(x) 26 for (int j=v;j>=vi[i]*x;j--) 27 f[j]=max(f[j],f[j-vi[i]*x]+wi[i]*x); 28 } 29 printf("%d",f[v]); 30 return 0; 31 }

再次說明一點,我將可以去無數次的物品的次數換成了v/vi[i]次(即通過總背包體積來限制他,這樣就可以省掉一步)。。。

二進制優化~~~依然的慢

待解救~~~~~~~

還有這題和隊列有個毛關系~~

?

轉載于:https://www.cnblogs.com/suishiguang/p/6217343.html

總結

以上是生活随笔為你收集整理的Codevs 3269 混合背包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。