UVA 11517 Exact Change (01背包)
2015-11-13 01:00
274 查看
题意:
n<=100个不用面值的硬币组成大于等于w<=10000的最小值,并输出最少使用硬币个数
题意:
嘛,硬币不超过10000,最多多一个,所以背到20000就好了
代码:
n<=100个不用面值的硬币组成大于等于w<=10000的最小值,并输出最少使用硬币个数
题意:
嘛,硬币不超过10000,最多多一个,所以背到20000就好了
代码:
// // Created by TaoSama on 2015-11-07 // Copyright (c) 2015 TaoSama. All rights reserved. // //#pragma comment(linker, "/STACK:1024000000,1024000000") #include <algorithm> #include <cctype> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iomanip> #include <iostream> #include <map> #include <queue> #include <string> #include <set> #include <vector> using namespace std; #define pr(x) cout << #x << " = " << x << " " #define prln(x) cout << #x << " = " << x << endl const int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7; int n, m, w[105], dp[20005]; int main() { #ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin); // freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout); #endif ios_base::sync_with_stdio(0); int t; scanf("%d", &t); while(t--) { scanf("%d%d", &m, &n); for(int i = 1; i <= n; ++i) scanf("%d", w + i); memset(dp, 0x3f, sizeof dp); dp[0] = 0; for(int i = 1; i <= n; ++i) for(int j = 20000; j >= w[i]; --j) dp[j] = min(dp[j], dp[j - w[i]] + 1); int ans; for(int i = m; i <= 20000; ++i) if(dp[i] != INF) {ans = i; break;} printf("%d %d\n", ans, dp[ans]); } return 0; }
相关文章推荐
- hdu 1203 I NEED A OFFER! 01背包
- poj 1159 Palindrome dp 字符串
- 我该如何向我的朋友解释“01背包”问题?
- 01背包问题
- hdu 2546 饭卡 (01背包)
- hdu 2602 Bone Collector (01背包 )
- hdu 2639 Bone Collector II (01背包,第k优解问题)
- [01背包]NOIP2001 PJ T4 装箱问题
- [01背包]NOIP 2005 PJ T3 采药 + 01背包的空间优化
- 01背包问题
- 01背包详解(ZeroOnePack)
- XX采药
- poj_1837
- 背包问题1:01背包
- hdu1203 — I NEED A OFFER! (01背包)
- hdu2602 — Bone Collector
- hdu1864 — 最大报销额
- hdu2546 — 饭卡 (01背包)
- hdu2955 — Robberies (01背包)
- 01背包 问题 思路 整理