题目描述
题目描述:
Maoge有N个砖块 (2<=N<=1000), 他想要把这些砖块搭成一个塔。如果他把砖块A放在B上面,A的长度必须小于等于B的长度减去D (1<=D<=n)。请找出一共有有多少种方法,然后输出答案 mod 10^9+7。
塔的高度不能为零。
输入格式:
第一行两个整数N和D。
第二行N个整数,代表砖块的长度。
输出格式:
答案 modulo 10^9+7.
样例输入:
4 1
1 2 3 100
样例输出:
15
我的代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,d,a[1005],ans[1005]={0},ans1=0;
ans[1]=1;
cin>>n>>d;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n);
for(int i=2;i<=n;i++)
{
ans[i]=1;
for(int j=1;j<=i and a[j]<=a[i]-d;j++)
{
ans[i]=(ans[j]+ans[i])%1000000007;
}
}
for(int i=1;i<=n;i++)
{
ans1=(ans1+ans[i])%1000000007;;
}
cout<<ans1%1000000007;
return 0;
}
请各位大佬看看有什么问题