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;
}

  

posted @ 2018-04-11 19:00  柳暗花明_liu  阅读(214)  评论(0编辑  收藏  举报