又是dfs暴力搜索,加个记忆路径三维数组,不然会超时,超时只有80分
#include<iostream>
using namespace std;
#define max 301
int n;
int a[max],b[max];
bool f[max][max][max]={0};
void dfs(int t,int x,int y)
{
if(f[t][x][y])
return;
f[t][x][y]=1;
if(t==n)
{
for(int k=0;k<=2;k++)
{
b[t]=3*a[t-1]-x-y+k;
if(b[t]>0)
{
if((b[t-1]+b[t])/2==a[t])
{
for(int i=1;i<n;i++)
cout<<b[i]<<" ";
cout<<b[n]<<endl;
exit(0);
}
}
}
return;
}
for(int k=0;k<=2;k++)
{
b[t]=3*a[t-1]-x-y+k;
if(b[t]>0)
dfs(t+1,b[t-1],b[t]);
}
}
int main()
{
int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=2*a[1];i++)
{
b[1]=i;
b[2]=2*a[1]-i;
dfs(3,b[1],b[2]);
b[1]=i;
b[2]=2*a[1]-i+1;
dfs(3,b[1],b[2]);
}
}