完全背包
1. 用一位数组就是好啊,完全背包和0-1背包就差个内层循环的顺序
2.求dl帮我看看为什么第二个会TLE啊
3.代码如下
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int v[105], w[105];
int dp[100005];
int main(){
int i, j, N, W;
while (scanf("%d",&N)!=EOF){
for (i = 1;i <= N;i++){
scanf("%d %d", &v[i],&w[i]);
}
scanf("%d",&W);
memset(dp, 0, sizeof(dp));
for (i = 1; i <= N; i++){
for (j = w[i]; j <= W; j++){
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
printf("%d\n", dp[W]);
}
return 0;
}
TLE在此
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int v[105], w[105];
int dp[105];
int main(){
int i, j, N, W;
while (scanf("%d",&N)!=EOF){
for (i = 0;i < N;i++){
scanf("%d %d", &v[i],&w[i]);
}
scanf("%d",&W);
memset(dp, 0, sizeof(dp));
for (i = 0; i < N; i++){
for (j = w[i]; j <= W; j++){
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
printf("%d\n", dp[W]);
}
return 0;
}