UVA 147 - Dollars(完全背包)
2014-10-15 17:06
363 查看
New Zealand currency consists of $100, $50, $20, $10, and $5 notes and $2, $1, 50c, 20c, 10c and 5c coins. Write a program that will determine, for any given amount, in how many ways that amount may be made up. Changing the order of listing does not increase
the count. Thus 20c may be made up in 4 ways: 1
20c, 2
10c, 10c+2
5c, and 4
5c.
justified in a field of width 17.
题意类似于上一道UVA674
却又无数坑点!答案应使用long long,double 数转化为int 应该注意精度问题 int nn = (int) (n * 20 + 0.5); UVA 是 %lld 输出的~
CODE;
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
const int inf=0xfffffff;
typedef long long ll;
using namespace std;
const int maxn = 30010/5;
int a[11] = {1,2,4,10,20,40,100,200,400,1000,2000};
ll dp[maxn];
int main()
{
double n;
while(~scanf("%lf", &n)){
if(n == 0.0) break;
int nn = (int)(n *20 + 0.5);
memset(dp, 0, sizeof(dp));
dp[0] = 1;
for(int i = 0; i < 11; ++i){
for(int j = a[i]; j <=nn; ++j){
dp[j] = dp[j] + dp[j - a[i]];
}
}
printf("%6.2lf%17lld\n", n, dp[nn]);
}
return 0;
}
the count. Thus 20c may be made up in 4 ways: 1
20c, 2
10c, 10c+2
5c, and 4
5c.
Input
Input will consist of a series of real numbers no greater than $300.00 each on a separate line. Each amount will be valid, that is will be a multiple of 5c. The file will be terminated by a line containing zero (0.00).Output
Output will consist of a line for each of the amounts in the input, each line consisting of the amount of money (with two decimal places and right justified in a field of width 6), followed by the number of ways in which that amount may be made up, rightjustified in a field of width 17.
Sample input
0.20 2.00 0.00
Sample output
0.20 4 2.00 293
题意类似于上一道UVA674
却又无数坑点!答案应使用long long,double 数转化为int 应该注意精度问题 int nn = (int) (n * 20 + 0.5); UVA 是 %lld 输出的~
CODE;
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
const int inf=0xfffffff;
typedef long long ll;
using namespace std;
const int maxn = 30010/5;
int a[11] = {1,2,4,10,20,40,100,200,400,1000,2000};
ll dp[maxn];
int main()
{
double n;
while(~scanf("%lf", &n)){
if(n == 0.0) break;
int nn = (int)(n *20 + 0.5);
memset(dp, 0, sizeof(dp));
dp[0] = 1;
for(int i = 0; i < 11; ++i){
for(int j = a[i]; j <=nn; ++j){
dp[j] = dp[j] + dp[j - a[i]];
}
}
printf("%6.2lf%17lld\n", n, dp[nn]);
}
return 0;
}
相关文章推荐
- uva 147 - Dollars 钱币兑换问题(浮点数) 精度问题 完全背包
- uva147 Dollars ——完全背包
- uva 147 Dollars(完全背包)
- uva 147 Dollars(完全背包)
- uva 147 Dollars (dp + 完全背包)
- UVA 147 Dollars 刀了(完全背包,精度问题)
- UVa 147 Dollars(DP完全背包)
- uva 147 Dollars(完全背包)
- Uva 147 Dollars 完全背包
- UVA 147 Dollars 完全背包 Commencel
- UVA 147 Dollars 完全背包
- UVa 147 Dollars (浮点数完全背包)
- Uva 147 Dollars(是完全背包)
- UVA 147 Dollars(完全背包)
- UVa 147 Dollars (完全背包)
- uva 147 Dollars(完全背包)
- UVA 147 Dollars(完全背包)
- uva 147 - Dollars(动态规划--完全背包)
- UVa 147 Dollars(DP完全背包)
- 【完全背包】UVA 147 Dollars