1.动态规划
#include <iostream>
#define N 20
using namespace std;
int main() {
freopen("0-1.in", "r", stdin);
int i, j, n, c;
int v[N], w[N], m[N][N] = {0};
cin>>n>>c;
for(i = 0; i < n; i++)
cin>>v[i];
for(i = 0; i < n; i++)
cin>>w[i];
for(int i = 1; i <= n; i++) {
for(j = 1; j <= c; j ++) {
if(j < w[i - 1])
m[i][j] = m[i - 1][j];
else {
if(m[i - 1][j] < m[i - 1][j - w[i - 1]] + v[i - 1])
m[i][j] = m[i - 1][j - w[i - 1]] + v[i - 1];
else
m[i][j] = m[i - 1][j];
}
}
}
cout<<m[n][c]<<endl;
for(i = n; i > 0; i--) {
if(m[i][c] == m[i - 1][c])
continue;
else {
cout<<i - 1<<" ";
c -=w[i- 1];
}
}
return 0;
}
2.测试数据
4 8
3 4 5 6
2 3 4 5
3.测试结果