整钞换零钞的方案数

今天俺在虐简单题目的路上被一道一级的看似简单实则DP的题目搞崩了

 

 先来找动态转移方程:

  过程十分复杂直接上结论:

    俺不会!  F(N)=F(N-5)+F(N-2)-F(N-2-5)+1;

最后一个for解决战斗

要注意的是,我们可以通过将输入的N除以十以及将10、20、50除以十来进行优化。

程序:

#include<bits/stdc++.h>
using namespace std;
const int N=1e7;
long long a[N]={0};
int main()
{
#ifdef LOCAL
    freopen( "1.in", "r", stdin );
    freopen( "1.out", "w", stdout );
#endif
    int d;     
    cin>>d;
    d/=10;
    a[1]=1;
    a[2]=2;
    a[3]=2;
    a[4]=3;
    a[5]=4;
    a[6]=5;
    a[7]=6;
    if(d>=8)
    {
        for(int i=8;i<=d;i++) a[i]=a[i-5]+a[i-2]-a[i-2-5]+1;
    }
    cout<<a[d];
    return 0;
}

 

posted @ 2022-09-21 20:22  王浩泽  阅读(93)  评论(0编辑  收藏  举报