UVA 147 Dollars

题意:就是给你11钟面额的钱,然后给你一个大面额的,用小面额的代替大面额的方法有多少种。

只是这里出现了小数,首先我们肯定是想吧小数转化成整数,所有面额都*100;

然后完全背包解决掉,

实际后面还要注意一个精度的问题。

代码中注意细节

#include<bits/stdc++.h>using namespace std;int w[11]={5,10,20,50,100,200,500,1000,2000,5000,10000};//*100后所有面值的钱long long dp[30000];int main(){memset(dp,0,sizeof(dp));dp[0]=1;//初始化for(int i=0;i<11;i++)//完全背包求种数{for(int j=w[i];j<=30000;j++){dp[j]+=dp[j-w[i]];}}double n;while(~scanf("%lf",&n)){double s=n*100;int m=s+0.5;//就是这里要加0.5的问题,因为浮点型在计算机中存储是有误差的,会导致进位丢失。if(n==0)break;printf("%6.2lf%17lld\n",n,dp[m]);}}

今日的执着,会造成明日的后悔。

UVA 147 Dollars

相关文章:

你感兴趣的文章:

标签云: