| syhd142 |
|
|||
|
日歷
統計
導航常用鏈接留言簿(2)隨筆檔案(23)文章分類(270)
文章檔案(122)我的豆瓣搜索最新評論
|
完全背包問題,一個物品可以無限次的使用。還有需要注意的就是該題要求恰好裝滿背包時的最小值,初始化的時候除了f[0]=0之外,其余的為負無窮。 #include <stdio.h>
#include <string.h> #define N 10005 #define INF 2139062144 #define MAX(a, b) (a > b ? a : b) int c[N], w[N], f[N]; int main() { int t, E, F, v, n; scanf("%d", &t); while(t--) { scanf("%d %d", &E, &F); v = F - E; scanf("%d", &n); for(int i = 0; i < n; i++) { scanf("%d %d", &w[i], &c[i]); w[i] = -w[i]; } memset(f, 128, sizeof(f)); f[0] = 0; for(int i = 0; i < n; i++) { for(int j = c[i]; j <= v; j++) { f[j] = MAX(f[j], f[j - c[i]] + w[i]); } } if(f[v] > -INF)printf("The minimum amount of money in the piggy-bank is %d.\n", -f[v]); else puts("This is impossible."); } return 0; }
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|
| Copyright © Fucker | Powered by: 博客園 模板提供:滬江博客 |