zoukankan      html  css  js  c++  java
  • HDU 2069 Coin Change

    思路:

    1.设dp[i][j]表示用i个硬币可以组成j元的种数;
    2.我们需要避免出现类似5+11+5这种同一情况的重复计算,因此我们分先后次序依次递推所有面值的硬币(即将对面值的遍历放到循环最外圈);
    3.设coin[k]是当前遍历到的面值,我们可以得到递推关系dp[i][j]=dp[i][j]+dp[i-1][j-coin[k]]

    代码:

    #include<iostream>
    using namespace std;
    const int N=5;
    const int MAX_N=101;
    const int MAX_S=251;
    int dp[MAX_N][MAX_S];     //dp[i][j]用i个硬币组成jcents的方法数
    int coin[N]={1,5,10,25,50};
    int rs[MAX_S];
    void init(){
    	for(int k=0;k<N;k++){
    		dp[1][coin[k]]++;
    		for(int i=2;i<MAX_N;i++){
    			for(int j=coin[k]+1;j<MAX_S;j++){
    				dp[i][j]+=dp[i-1][j-coin[k]];
    			}
    		}
    	}
    	for(int i=1;i<MAX_S;i++){
    		for(int j=1;j<MAX_N;j++) rs[i]+=dp[j][i];
    	}
    } 
    int main(){
    	init();
    	int n;
    	while(~scanf("%d",&n)){
    		if(!n) puts("1");
    		else printf("%d
    ",rs[n]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    10A:子串计算
    09I:鸡蛋的硬度
    09H:数字组合
    09G:登山
    09F:股票买卖
    09E-计算字符串距离
    09D-最大上升子序列和
    09C-全排列
    02C-垃圾炸弹
    【c#基础】vs2019设置高级选项
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308832.html
Copyright © 2011-2022 走看看