可以給個方向改進嘛?thanks'
程式碼如下:
///////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//範圍:0<N<=100 , 0<=重量, 價值<=2000 , 0<重量限制<=10000
#define N 100 // 物品總數上限
#define W 100000 // 背包耐重上限
int n = 0, temp_n= 0,i=0,j=0,k=0,w=10000;
//(可以使用物品的總重量作為此值)
int cost[N], weight[N]; // 物品的價值與重量
int c[N + 1][W + 1]; // DP表格
void knapsack(int, int) ;
int max(int, int) ;
int main() {
while(scanf("%d",&n)==1) {
i=0;
temp_n = n;
while(temp_n--) {
scanf("%d %d",&weight[i],&cost[i]);
++i;
}
scanf("%d",&w);
knapsack(n,w);
printf("%d\n",c[n][w]);
}
return 0;
}
int max(int a,int b) {
return (a>=b)?(a):(b);
}
//bottom-up
void knapsack(int n, int w) {
int i = 0,j=0;
memset(c, 0, sizeof(c));
for (i = 0; i <= n; ++i) { // 窮舉每種物品
for (j = 0; j <= w; ++j) { // 窮舉每種重量
if (j - weight[i] < 0) {
// 耐重能力不足,故只能不放。
c[i+1][j] = c[i][j];
} else {
// 耐重能力足夠,可以放或不放。
c[i+1][j] = max(
c[i][j],
c[i][j] - weight[i] + cost[i]
);
}
}
}
}
參考DJWS大大演算法筆記
程式碼修改後成功AC了:
///////////////////////////////////////////////////////////////////////////
#include <stdio.h>