zoukankan      html  css  js  c++  java
  • hdu 2069

    题目大意:输入一个钱数,看能否用1、5、10、25、50这5种硬币来组成输入的钱数。如果能,则输出方案数。

    解题思路:一开始看到题目的时候,很自然想到用母函数。后来认真看了一下题目,发现用母函数居然不会做(以下母函数的方法是参考别人的)。。。

    后来就尝试着用暴力法解决。然后居然AC了。


    代码如下:

    暴力法(用c写不行。)

    /*
     * 2069_2.cpp
     *
     *  Created on: 2013年8月9日
     *      Author: Administrator
     *      我爱天天,天天爱我
     */
    
    #include <iostream>
    
    using namespace std;
    
    int main(){
    	int n,a,b,c,d,e;
    
    	while(cin>>n){
    		int count = 0;
    		for(a = 0 ; a <= n ; ++a){
    			for(b = 0 ; 5*b <= n-a ; ++b){
    				for(c= 0 ; 10*c <= n - a - 5*b ; ++c){
    					for( d= 0 ; 25*d <= n - a - 5*b - 10*c;++d){
    						e = n - a - 5*b - 10*c - 25*d;
    
    						if(e % 50 == 0 && a + b + c + d + e/50 <= 100){
    							count ++;
    						}
    					}
    				}
    			}
    		}
    
    		cout<<count<<endl;
    	}
    
    }
    
    


    母函数法:

    #include<iostream>
    using namespace std;
    	int c1[251][101],c2[251][101];
    	int a[6]={0,1,5,10,25,50};
    	int sum[251];
    int main(){
    	
    
    	c1[0][0]=1;   
     /* 注意 这里的初始化替代了:
    int n,a[5]={1,5,10,25,50},sum; 
        for(int i=0;i<=260;++i)
        for(int j=0;j<=101;++j) 
        {
            c1[i][j]=0;c2[i][j]=0;
        }
        for(int i=0;i<=100;++i)//用面值为1的硬币组成价值为i(不超过100) 
        {
                c1[i][i]=1;*/
    
            for(int i=1;i<=5;i++){
    		for(int j=0;j<=250;j++){
    			for(int k=0;k*a[i]+j<=250;k++){
    				for(int t=0;k+t<=100;t++){//遍历c1的coin数量
    					c2[k*a[i]+j][t+k]+=c1[j][t];
    				}
    			}
    		}
    		for(int i=0;i<251;i++){
    			for(int j=0;j<101;j++){
    				c1[i][j]=c2[i][j];
    				c2[i][j]=0;
    			}
    		}
    	}
    	/*int n;
    	while(cin>>n){
    		int sum=0;
    		for(int i=0;i<105;i++){
    			sum+=c1[n][i];
    		}
    		cout<<sum<<endl;
    	}
    	*/
    	 for ( int j = 0; j != 251; ++ j )
               {
                    for ( int i = 0; i != 101; ++ i )
                    {
                          sum[j] += c1[j][i] ;
                    }
               }
               int N;
               while ( cin >> N )
               {
                      
                      cout << sum[N] << endl;
               }
    return 0;
    }




  • 相关阅读:
    设计模式之建造者模式(简单)
    设计模式之简单工厂模式,工厂模式,抽象工厂模式
    设计模式之观察者模式
    Redis java操作客服端——jedis
    Redis基础
    java环境变量配置加maven配置
    设计模式之JDK动态代理
    springboot+mybatis+Thymeleaf
    OS问题管理系统开发
    复制CentOS虚拟机网络配置
  • 原文地址:https://www.cnblogs.com/riskyer/p/3249410.html
Copyright © 2011-2022 走看看