打表好
2024-07-07 14:29:54
发布于:上海
41阅读
0回复
0点赞
注意到数据范围十分甚至九分的小,所以可以打表。
首先写一个很朴素的生成程序:
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int a[15];
int main(){
int n;
cin >> n;
for(int i=1; i<=n; i++) a[i] = i;
int cnt=0;
L:while(next_permutation(a+1, a+1+n)){
bool sub[100]={0}, plu[100]={0};
for(int i=1; i<=n; i++){
if(sub[50+a[i]-i]||plu[a[i]+i]){
goto L;
}
sub[50+a[i]-i]=plu[a[i]+i]=1;
}
cnt++;
if(cnt<=3){
for(int i=1; i<=n; i++) cout << a[i] << " ";
cout << endl;
}
}
cout << cnt << endl;
return 0;
}
的时候,程序跑得飞快。 时,有点慢了。时,前三个解都可以正确跑出,但是解的数量迟迟跑不出。我们OEIS一下, 时的解数也知道了。
然后就直接打表啦~
这里空空如也
有帮助,赞一个