1152. False Mirrors

1402 단어 ror
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
",ans); } return 0; }

 

좋은 웹페이지 즐겨찾기