1. 程式人生 > 其它 >分組揹包例題(如何記錄組別)

分組揹包例題(如何記錄組別)

P1757 通天之分組揹包 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)

這道題我真的會酸Q!好笨啊,忘記了桶排序可以將組別分清楚,非得去搞結構體,麻煩還不對。注意審題,第一行輸入的是總體重和個數,別輸入反了。

 

唉,一定要記得桶排序啊喂!!!

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e3+100;
 4 int f[N],w[N],v[N],s[N],g[N][N];
 5 
 6 int main()
 7 {
 8     int n,m;scanf("%d%d",&m,&n);
9 int t=0; 10 for(int i=1;i<=n;i++) 11 { 12 int xx; 13 scanf("%d%d%d",&v[i],&w[i],&xx); 14 15 //重點 16 t=max(t,xx); 17 s[xx]++; 18 g[xx][s[xx]]=i; 19 } 20 21 for(int i=1;i<=t;i++) 22 { 23 for(int j=m;j>=0
;j--) 24 { 25 for(int k=1;k<=s[i];k++) 26 { 27 int vi=v[g[i][k]],wi=w[g[i][k]]; 28 if(j>=vi) 29 f[j]=max(f[j],f[j-vi]+wi); 30 } 31 } 32 } 33 34 printf("%d\n",f[m]); 35 36 return
0; 37 }