01背包
hdu 2602
#include <bits/stdc++.h> using namespace std; #define N 1010 #define ll long long #define inf 0x3f3f3f3f int t; int n,V; struct Node{ int w,v; }no[N]; int dp[N]; int main() { scanf("%d",&t); while(t--){ fill(dp,dp+N,0); scanf("%d%d",&n,&V); for(int i =0;i<n;i++) scanf("%d",&no[i].w); for(int i =0;i<n;i++) scanf("%d",&no[i].v); for(int i =0;i<n;i++){ for(int j =V;j>=no[i].v;j--) {//逆序,dp[小容量]也是由前面更新而来,此时更新dp[j]时,用当前的,前面一定没用过。 dp[j] = max(dp[j],dp[j-no[i].v]+no[i].w); } } printf("%d\n",dp[V]); } return 0; }
多重背包
原文:https://www.cnblogs.com/tingtin/p/11524240.html