http://acm.timus.ru/problem.aspx?space=1&num=1152
有水了 dfs居然能过
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=50;
const int INF=0x7fffffff;
int a[N];
int ans;
int n;
void dfs(int L,int an,int I)
{
for(int i=1;i<=n;++i)
{
int i1=(i-1>=1)?i-1:n,i2=(i+1<=n)?i+1:1;
int temp=a[i]+a[i1]+a[i2];
if(temp>0)
{
if(L-temp==0)
{
if(an<ans)
{ans=an;}
continue;
}
if(an+L-temp<ans)
{
int c=a[i],c1=a[i1],c2=a[i2];
a[i]=0;a[i1]=0;a[i2]=0;
dfs(L-temp,an+L-temp,I+1);
a[i]=c,a[i1]=c1,a[i2]=c2;
}
}
}
}
int main()
{
//freopen("data.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
int sum=0;
for(int i=1;i<=n;++i)
{
scanf("%d",&a[i]);
sum+=a[i];
}
ans=INF;
dfs(sum,0,0);
printf("%d\n",ans);
}
return 0;
}
转载于:https://www.cnblogs.com/liulangye/archive/2012/09/05/2672054.html