#include <stdio.h>
#include <stdlib.h>
#define N 1010
int opt[N][N];
int w[N];
int v[N];
int bestVal(int opt[][N], int *w, int *v, int m, int c){
int i, j, tmp;
for(i = 0; i <= c; ++i) opt[0][i] = 0;
for(i = 1; i <= m; ++i){
for(j = 0; j <= c; ++j){
opt[i][j] = opt[i-1][j];
if(j >= w[i-1] && (tmp = opt[i-1][j-w[i-1]] + v[i-1]) > opt[i][j])
opt[i][j] = tmp;
}
}
return opt[m][c];
}
int main(void){
int m, c, t, i;
scanf("%d", &t);
while(t--){
scanf("%d%d", &m, &c);
for(i = 0; i < m; ++i) scanf("%d", &v[i]);
for(i = 0; i < m; ++i) scanf("%d", &w[i]);
printf("%d\n", bestVal(opt, w, v, m, c));
}
return 0;
}
hdu2602 01背包问题
最新推荐文章于 2020-04-02 16:55:44 发布