我的代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
ll qpow(ll a,ll b){
ll sum=1;
while(b){
if(b&1) sum=(sum*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return sum%mod;
}
bool is_beatiful_array(int n,int m,int array_a[],int array_b[]){
for(int i=1; i<=m; i++){
for(int j=1; j<=n; j++){
if(array_b[j]==array_a[i]){
int flag=0;
for(int k=j+1; k<=min(n,j+array_a[i]-1); k++){
if(array_b[k]==array_a[i]){
return false;
}
}
}
}
}
return true;
}
int cnt=0;
void dfs(int deep,int n,int m,int b[],int a[105]){
if(deep==n+1){
int k=is_beatiful_array(n,m,b,a);
if(k==1){
/*debug......
for(int i=1; i<=n; i++){
cout<<a[i]<<" ";
}
cout<<endl;*/
cnt=(cnt+1)%mod;
}
return;
}
for(int i=1; i<=m; i++){
int j=a[deep];
a[deep]=b[i];
dfs(deep+1,n,m,b,a);
a[deep]=j;
}
return;
}
int main(){
int n,m;
cin>>n>>m;
int a[10],b[105]={0};
for(int i=1; i<=m; i++){
cin>>a[i];
}
if(m==1) cout<<1<<endl;
else if(n==1) cout<<m<<endl;
else{
dfs(1,n,m,a,b);
cout<<cnt<<endl;
}
return 0;
}
怎么改啊,怎么剪枝优化