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;
}

 

 

posted on 2012-09-05 15:51  夜->  阅读(181)  评论(0编辑  收藏  举报