不用记忆化搜索能过,写了记忆化搜索20分,为什么啊嘤嘤嘤
普通递归
#include <bits/stdc++.h>
using namespace std;
int dg(int n,int m)
{
if(n==0||m==1) return 1;
if(n<0||m<1) return 0;
return dg(n,m-1)+dg(n-m,m);
}
int main()
{
int t;cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
cout<<dg(n,m)<<endl;
}
return0;
}
记忆化搜索
#include <bits/stdc++.h>
using namespace std;
int a[100000010];
int dg(int n,int m)
{
if(n==0||m==1) return 1;
if(n<0||m<1) return 0;
if(a[n]>0) return a[n];
return a[n]=dg(n,m-1)+dg(n-m,m);
}
int main()
{
int t;cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
cout<<dg(n,m)<<endl;
}
return 0;
}