您的位置:首页 > 其它

UVa 147 Dollars(硬币转换)

2015-12-21 16:27 357 查看
题目大意:给出五种硬币,价值分别为 1,5,10,25,50,。当给出一个价值时,求出能够组合的种数(每种硬币可以用无限次)。

思路:完全背包, dp[i][j]表示总数 i 能够被表示的种数。状态转移方程为 dp[i][j] = dp[i-k*v[j]][j-1] (k = 0,1,2,3...)。

C++ 代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;

int v[6] = {0,1,5,10,25,50};

int main(){
int i,j,k,t,n,dp[7490][6];
memset(dp,0,sizeof(dp));
for(i=0; i<6; i++)
dp[0][i] = 1;
for(i=1; i<7490; i++){
for(j=1; j<6; j++){
k = 0;
t = i - k*v[j];
while(t >= 0){
dp[i][j] += dp[t][j-1];
k ++;
t = i - k*v[j];
}
}
}
while(scanf("%d",&n) != EOF){
cout << dp
[5] << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: