九度OJ 1455: 珍惜現在,感恩生活
阿新 • • 發佈:2019-01-31
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Food //糧食結構體 { int price; int weight; }Food; int max(int a, int b) { return a > b ? a : b; } int main() { int C; scanf("%d", &C); while(C--) { Food a[2010]; int dp[110]; int n, m; while(scanf("%d%d", &n, &m) != EOF) { int i, j, c; for(i = 0; i < m; i++) { scanf("%d%d%d", &a[i].price, &a[i].weight, &c); while(--c) //將多袋糧食分開,將多重揹包問題轉化為01揹包問題 { i++; m++; a[i] = a[i-1]; } } memset(dp, 0, sizeof(int)*110); //動態規劃陣列初始化 for(i = 0; i < m; i++) //動態規劃 for(j = n; j >= a[i].price; j--) //此處必須從大到小 dp[j] = max(dp[j - a[i].price] + a[i].weight , dp[j]); printf("%d\n", dp[n]); } } //system("pause"); return 0; } /************************************************************** Problem: 1455 User: superlc320 Language: C++ Result: Accepted Time:10 ms Memory:1020 kb ****************************************************************/