#include <iostream>
using namespace std;
typedef long long ll;
const int N = 100010,MOD = 1e9 + 7;
ll a[N]; // 有障碍物的地方
ll b[N]; // 记录下标
int n;
ll sum;
void dfs(ll dep,ll ans)
{
if(dep == n-1) sum = (sum + ans) % MOD;
for(int i=dep+1;i < n;i++)
{
int r = b[i];
int l = b[dep]; // i是会变的,但是dep不会!
int dis = r - l;
ll res = 0;
for(int j = 1;j < dis;j++)
{
while(j + l < r && a[j+l] != 1) l += j;
if(l+j == r) res++;
l = b[dep];
}
res = res * ans % MOD;
dfs(i,res);
}
}
int main()
{
cin >> n;
for(int i=0;i < n;i++)
{
cin >> b[i];
a[b[i]] = 1;
}
dfs(0,1);
cout << sum;
return 0;
}
CSP 校门外的树 暴力搜索30分
最新推荐文章于 2025-05-16 00:26:46 发布