HDU 1455 Sticks

http://acm.hdu.edu.cn/showproblem.php?pid=1455

题意大概就是:有一堆的木棒,长度不一,它们是有一些整齐的木棒截断而成的,求最小的整齐长度。

额,这道题目第一次做的时候是在集训前一天。那时候默默的用了自己学过的为数不多的算法:贪心去做了这题。不出意外的WA了。

囧了。

过了10几天后的今天突然又去看了这题,突然觉得可以使用这几天在学的搜索来做。然后,果断的敲了一个DFS,,还是WA了,那时候感觉自己做的没错,然后就去请教队长,队长让我去和那些AC的代码数据对拍,结果。果然发现了自己的错误。唉,对于DFS的掌握不够啊,忘记恢复vis了。


人生当中第二道DFS题啊





#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>

using namespace std;
typedef long long LL;

#define MIN(a,b) (a > b ? b : a)
int N,cnt,flag,V,ok;
int aa[100],ans[100],vis[100];
int cmp(int a,int b)
{
      return a > b ;
}
int get(int x)
{
      int c = 0;
      for (int i=1;i<=x;i++)
            if (x % i == 0)ans[c++] = i;
      return c;
}
void show()
{
      for (int i=0;i<N;i++)
            printf("%d ",aa[i]);
      printf("\n");
}
void DFS(int v,int t,int sum)
{
      if (sum == 0){flag = 1;return ;}
      for (int i=t;i<N && !flag;i++)
      {
            if (v - aa[i] >= 0 && vis[i] == 0)
            {
                  vis[i] = 1;
                  if (v == aa[i])DFS(V,0,sum-aa[i]);
                  else DFS(v-aa[i],i+1,sum-aa[i]);
                  vis[i] = 0;
                  if (v == aa[i] || v == V)return ;
                  while (aa[i] == aa[i+1])i++;
            }
      }
}
int main()
{
      int cc = 1;
      while (scanf("%d",&N) && N)
      {
            int sum = 0;
            memset(aa,0,sizeof(aa));
            for (int i=0;i<N;i++)
            {
                  scanf("%d",&aa[i]);
                  sum += aa[i];
            }
            int m = get(sum);
            sort(aa,aa+N,cmp);
           // show();
            for (int i=0;i<m;i++)
            {
                  if (aa[0] > ans[i])continue ;
                  memset(vis,0,sizeof(vis));
                  V = ans[i];
                  flag = 0;
                  DFS(ans[i],0,sum);
                  if (flag )
                  {
                        printf("%d\n",ans[i]);
                        break ;
                  }
            }
      }
      return 0;
}


posted @ 2013-07-27 13:01  cnwsycf  阅读(161)  评论(0编辑  收藏  举报