站外题求助:一关注
  • 板块学术版
  • 楼主Chalage_2010
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/11/20 11:53
  • 上次更新2023/10/27 02:15:00
查看原帖
站外题求助:一关注
760690
Chalage_2010楼主2022/11/20 11:53

题目描述

题目描述:
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;
}

请各位大佬看看有什么问题

2022/11/20 11:53
加载中...