HRBUST 1993【完全背包裸題】
阿新 • • 發佈:2018-05-01
i++ size set 裸題 理解 string turn void int
題目:Lili有很多不同面值的硬幣,不同面值的硬幣的重量也是不同的,現在知道了這堆硬幣中含有的硬幣的種類和面值,以及這堆硬幣的總重量,你能算出Lili至少有多少錢麽。。
把max改成min就好了。。
話說其實對完全背包理解不深刻T_T,憑印象打上去的碼
#include<stdio.h> #include<string.h> #include<iostream> #define MAX 1000000 #define INF 0x1f1f1f1f using namespace std; struct c { int w; int val; }coin[100000]; int dp[MAX]; int min(int a, int b) { return (a > b) ? b : a; } int main(void) { int W, n; while (~scanf("%d%d", &W, &n)) { for (int i = 1; i <= n; i++) scanf("%d%d", &coin[i].val, &coin[i].w); memset(dp, INF, sizeof(dp)); dp[0] = 0; for (int i = 1; i <= n; i++) { for (int v = coin[i].w; v <= W; v++) { dp[v] = min(dp[v], dp[v - coin[i].w] + coin[i].val); } } if (dp[W] == INF) printf("-1\n"); else printf("%d\n", dp[W]); } return 0; }
HRBUST 1993【完全背包裸題】