整钞换零钞的方案数
今天俺在虐简单题目的路上被一道一级的看似简单实则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; }