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