ccf[201809-4]再卖菜-70分暴力

思路是深搜,然后根据他给的代码约束可以取的值减小一点复杂度,最后选够了之后计算并与答案相比较,由于是从一开始搜的,那么答案一定是字典序最小的,考试的时候打了个这个才30分,现在变成了70分,郁闷啊...

加上这四十分我就差十分就会编程了..话说这次第三题没写,第四题可能是敲错了?第五题暴力20分..简直就是敲了一下午的暴力啊,等到大佬们发题解的时候在更新这个题的满分题解...据说是DP?

下附代码敲得很凌乱将就着看算了

#include

using namespace std;

int ans[301];
int ans1[301];
int select[301];
int n;
int ok=0;

bool check()
{
	for(int i=1;i<=n;i++)
	{
		if(i==1)
		{
			ans1[i]=(select[i]+select[i+1])/2;
		}
		else if(i==n)
		{
			ans1[i]=(select[i]+select[i-1])/2;
		}
		else
		{
			ans1[i]=(select[i]+select[i-1]+select[i+1])/3;
		}
	}
	int flag=1;
	num++;
	for(int i=1;i<=n;i++)
	{
		if(ans[i]!=ans1[i])
		{
			flag=0;
			break;
		}
	}
	return flag;
}

void dfs(int x)
{
	if(ok) return;
	if(x==n+1)
	{
		if(check())
		{
			for(int i=1;i<=n;i++)
				cout<0)
			{
					select[x]=i;
				dfs(x+1);
			}
		
		}
		return;
	}
	else if(x>2)
	{
		for(int i=ans[x-1]*3-select[x-1]-select[x-2];i<=2+ans[x-1]*3-select[x-1]-select[x-2];i++)
		{
			if(i>0)
			{
				select[x]=i;
			dfs(x+1);
			}
			
		}
		return;
	}
 } 

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>ans[i];
	dfs(1);
	return 0;
 } 

 

 

你可能感兴趣的:(ccf[201809-4]再卖菜-70分暴力)