F[i][j] = max(F[i-1][j],F[i-1][j - volume[i]] + value[i]); #include <iostream> #include <cstring> using namespace std; int N,V; long value[1001]; long volume[1001]; long F[1001][1001]; int T; long max(long a,long b) { return a>b?a:b; } int main() { cin>>T; while(T--) { cin>>N>>V; int i,j; for(i = 1; i <= N; i++) { cin>>value[i]; } for(i = 1; i <= N; i++) { cin>>volume[i]; } memset(F,0,sizeof(F)); for(i = 1; i <= N; i++) { for(j = 0; j <= volume[i] - 1; j++) { F[i][j] = F[i-1][j]; } for(j = volume[i]; j <= V; j++) { F[i][j] = max(F[i-1][j],F[i-1][j-volume[i]] + value[i]); } } cout<<F[N][V]<<endl; } return 0; }