Bone Collector HDU - 2602 (01揹包問題)
阿新 • • 發佈:2018-11-19
真正的01揹包問題
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <string> #include <vector> #include <queue> #include <cmath> using namespace std; #define ms(x, n) memset(x,n,sizeof(x)); typedef long long LL; const LL maxn = 1010; int T, n, m; int v[maxn], w[maxn], dp[maxn]; int solve() { ms(dp, 0); for(int i = 1; i <= n; i++) for(int j = m; j >= w[i]; j--){ dp[j] = max(dp[j], dp[j-w[i]]+v[i]); } return dp[m]; } int main() { cin >> T; while(T--){ cin >> n >> m; for(int i = 1; i <= n; i++) cin >> v[i]; for(int i = 1; i <= n; i++) cin >> w[i]; cout << solve() << endl; } return 0; }