• dp打表-hdu2069-找钱问题问有几种找法


    老罗课其实讲得很好,真的,老罗写书的话我可能真的会买

    找出状态转移方程然后打表即可

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    const int maxn=4000;
    
    int dp[260][110]; //钱数 硬币数 
    int coins[5]={1,5,10,25,50};
    
    void print_dp(){
    	dp[0][0]=1;
    	for(int t=0;t<5;t++){
    		for(int k=1;k<=100;k++){
    			for(int i=coins[t];i<=250;i++){
    				dp[i][k] += dp[i-coins[t]][k-1];
    			}
    		} 
    	}
    }
    
    int ans[251]={0};
    void cnt(){
    	for(int k=1;k<=250;k++)
    	for(int i=1;i<=100;i++){
    		if(dp[k][i])
    		ans[k]+=dp[k][i];
    	}
    }
    
    int main(){
    //	freopen("in.txt","r",stdin);
    //	freopen("out1.txt","w",stdout); 
    	
    	memset(dp,0,sizeof(dp));
    	print_dp();
    	cnt();
    
    	int money;
    	while(cin>>money){
    		if(money==0) cout<<1<<endl;
    		else
    		cout<<ans[money]<<endl;
    	}
        return 0;
    }
    

      

    柳暗花明又一村
  • 相关阅读:
    pinus学习(3)
    pinus学习(2)
    HBASE架构解析(二)
    排序算法
    泛型原理
    《JAVA NIO》第二章缓冲区
    @SuppressWarnings
    网络编程
    synchronized原理
    第十六节:pandas之日期时间
  • 原文地址:https://www.cnblogs.com/ucandoit/p/8797660.html
Copyright © 2020-2023  润新知