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;
}
柳暗花明又一村

浙公网安备 33010602011771号