萌新的求助——P1329数列
  • 板块P1329 数列
  • 楼主Eraine
  • 当前回复9
  • 已保存回复9
  • 发布时间2020/7/3 15:24
  • 上次更新2023/11/6 23:43:58
查看原帖
萌新的求助——P1329数列
305891
Eraine楼主2020/7/3 15:24

P1329 数列

#1~#5AC,#6~#8WA,#9~#10TLE

代码如下:

#include<iostream>
#define in long long
using namespace std;
in tail,n,s;
in qhx(in b,in d){
	return (b+b+d-1)*d/2;
}
in qhn(in b,in d){
	return (b+b-d+1)*d/2;
}
in a[105],c[105][105];
void dfs(in sum,in d){//sum表示和,d表示循环位数 
	//cout<<d<<" "<<sum<<endl;
	if((qhx(a[d-1]+1,s-d+1)+sum<s)||(qhn(a[d-1]+1,s-d+1)+sum>s))return;
	if(d==n){
		if(sum+a[d-1]+1==s){
			tail++;
			if(tail<=100){
				for(int i=1;i<n;i++)c[tail][i]=a[i];
				c[tail][n]=a[n-1]+1;
			}
		}else if(sum+a[d-1]-1==s){
			tail++;
			if(tail<=100){
				for(int i=1;i<n;i++)c[tail][i]=a[i];
				c[tail][n]=a[n-1]-1;
			}
		}
		return;
	}
	a[d]=a[d-1]+1;
	dfs(sum+a[d],d+1);
	a[d]=a[d-1]-1;
	dfs(sum+a[d],d+1);
}
int main(){
	cin>>n>>s;
	//if(((s-1)%2)%2==n%2){
	//	cout<<"0";
	//	return 0;
	//} 
	dfs(0,2);
	cout<<tail<<endl;
	for(in i=1;i<=((tail<=100)?tail:100);i++){
		for(in j=1;j<=n;j++)cout<<c[i][j]<<" ";
		cout<<endl;
	}
	return 0;
}

是思路错了?还是……

大佬求教!!!

2020/7/3 15:24
加载中...