题目链接:http://118.190.20.162/view.page?gpid=T76
#include<iostream>
using namespace std;
int t,a[400],b[400];
bool f[301][301][301];
void dfs(int n)
{
if(f[n][b[n-1]][b[n-2]])return;
f[n][b[n-1]][b[n-2]]=1;
if(n==t)
{
if((3*a[n-1]-b[n-2])/2==a[n]||(3*a[n-1]-b[n-2]+1)/2==a[n]||(3*a[n-1]-b[n-2]+2)/2==a[n]) //判断最后一天菜价是否与输入值匹配
{
for(int i=1;i<=n-1;++i)
cout<<b[i]<<" ";
for(int i=0;i<3;++i)
{
if((3*a[n-1]-b[n-2]+i)/2==a[n])
{
cout<<3*a[n-1]-b[n-1]-b[n-2]+i;
exit(0);
}
}
}
return;
}
for(int i=0;i<3;++i)
{
b[n]=3*a[n-1]-b[n-2]-b[n-1]+i; //递推关系式
if(b[n]>0)
dfs(n+1);
}
}
int main()
{
cin>>t;
for(int i=1;i<=t;++i)
cin>>a[i];
for(int i=1;i<=2*a[1];++i)
{
b[1]=i;
b[2]=2*a[1]-i;
dfs(3);
}
return 0;
}