今天开始练dp了
一直最怕dp 也学不来。
但是从搜索得到经验 多多钻研总是会有进步的。
先水一道裸01背包
#include<iostream>
using namespace std;
#define N 1001
int n, vol;
int v[N], w[N];
int re[N][N];
void zeroOneBack(){
int j, k,m,temp1,temp2;
j = n - 1;
for (k = w[j] - 1 ; k >= 0; k--){
re[j][k] = 0;
}
for (k = w[j]; k <= vol; k++){
re[j][k] = v[j];
}
for (k = j - 1; k >= 0; k--){
for (m = 0; m < w[k]; m++){
re[k][m] = re[k + 1][m];
}
for (; m <= vol; m++){
temp1 = re[k + 1][m];
temp2 = re[k + 1][m - w[k]] + v[k];
re[k][m] = temp1>temp2 ? temp1 : temp2;
}
}
}
int main(){
// freopen("TestDate.txt", "r", stdin);
int testcase,i,max;
cin >> testcase;
while (testcase--){
cin >> n >> vol;
for (i = 0; i < n; i++){
cin >> v[i];
}
for (i = 0; i < n; i++){
cin >> w[i];
}
zeroOneBack();
cout << re[0][vol] << endl;
}
return 0;
}