SDOJ1037 慶功會(多重揹包)
阿新 • • 發佈:2018-11-11
傳送門
【題目分析】
然而蒟蒻並不會單調佇列優化。。。。同時也很懶不想寫二進位制拆分。。。。。所以直接上了三重迴圈暴力。。。
【程式碼~】
#include<bits/stdc++.h> using namespace std; const int MAXN=1e4+10; const int MAXM=6e3+10; int n,m; int w[MAXN],c[MAXN],t[MAXN]; int dp[MAXN]; int Read(){ int i=0,f=1; char c; for(c=getchar();(c>'9'||c<'0')&&c!='-';c=getchar()); if(c=='-') f=-1,c=getchar(); for(;c>='0'&&c<='9';c=getchar()) i=(i<<3)+(i<<1)+c-'0'; return i*f; } int main(){ n=Read(),m=Read(); for(int i=1;i<=n;++i){ w[i]=Read(),c[i]=Read(),t[i]=Read(); for(int j=m;j>=w[i];--j){ for(int k=0;k<=t[i];++k){ if(w[i]*k>j) break; dp[j]=max(dp[j],dp[j-w[i]*k]+c[i]*k); } } } cout<<dp[m]; return 0; }