这段时间在学习dp,不过还没怎么写自己的笔记,差不多这几天吧,开始,每天记录自己的成长,动态是一个难点,但也是编程比赛中最常考到的点,希望自己越来越进步吧,加油
话不多说了,上题目吧,先来链接吧:
传送门
题目描述
有五种钱币,分别为1分、5分、10分、25分、50分的;
例如 11分的组成:
11个1分;
1个10分+1个1分
2个5分+1个1分
1个5分+6个1分
输入
一个超过7489的整数m
输出
组成m的组合数目
解题思路
一开始看到就第一感觉就是dp,每一个的结果都可以由比他小1的推出
AC代码
#include<bits/stdc++.h>
#include<vector>
using namespace std;
typedef long long ll;
int coin[]={1,5,10,25,50};
int dp[9999]={0};
int main()
{
//freopen("1.txt","r",stdin);
int T;
int m;
while(cin>>m)
{
memset(dp,0,sizeof(dp));
dp[0]=1;
for(int i=0;i<5;i++)
{
for(int j=coin[i];j<=m;j++)
{
dp[j]+=dp[j-coin[i]];
}
}
cout<<dp[m]<<endl;
}
}