USACO 4.2 Cowcycles(DFS)

使劲水啊。。。数据量太唬人了。。普通DFS就能过。。。看懂题意就好。。看不懂题是硬伤啊。。

  1 /*
  2 ID: cuizhe
  3 LANG: C++
  4 TASK: cowcycle
  5 */
  6 #include <cstdio>
  7 #include <cstring>
  8 #include <cmath>
  9 #include <string>
 10 #include <ctime>
 11 #include <queue>
 12 #include <vector>
 13 #include <algorithm>
 14 using namespace std;
 15 int o1[101],o2[101],ax[15],ay[15];
 16 double arry[101],d[101];
 17 int x,y,x2,y2,n,m;
 18 double minz = 100000000;
 19 void dfs2(int str,int step)
 20 {
 21     int i,j,num = 0;
 22     double ans = 0,sum = 0;
 23     if(step > m)
 24     {
 25         if(o1[n]*o2[m] >= 3*o1[1]*o2[1])
 26         {
 27 
 28             for(i = 1;i <= n;i ++)
 29             {
 30                 for(j = 1;j <= m;j ++)
 31                 {
 32                     arry[num++] = (o1[i]*1.0/o2[j]);
 33                 }
 34             }
 35             sort(arry,arry+num);
 36             for(i = 0;i < num-1;i ++)
 37             {
 38                 d[i] = arry[i+1] - arry[i];
 39                 sum += d[i];
 40             }
 41             sum = sum/(num-1);
 42             for(i = 0;i < num-1;i ++)
 43             {
 44                 ans += (d[i]-sum)*(d[i]-sum);
 45             }
 46             ans = ans/(num-1);
 47             if(minz > ans)
 48             {
 49                 minz = ans;
 50                 for(i = 1;i <= n;i ++)
 51                 ax[i] = o1[i];
 52                 for(i = 1;i <= m;i ++)
 53                 ay[i] = o2[i];
 54             }
 55         }
 56         return ;
 57     }
 58     for(i = str;i <= y2;i ++)
 59     {
 60         o2[step] = i;
 61         dfs2(i+1,step+1);
 62     }
 63 }
 64 void dfs1(int str,int step)
 65 {
 66     int i;
 67     if(step > n)
 68     {
 69         dfs2(x2,1);
 70         return;
 71     }
 72     for(i = str;i <= y;i ++)
 73     {
 74         o1[step] = i;
 75         dfs1(i+1,step+1);
 76     }
 77     return ;
 78 }
 79 int main()
 80 {
 81     int i;
 82     freopen("cowcycle.in","r",stdin);
 83     freopen("cowcycle.out","w",stdout);
 84     scanf("%d%d",&n,&m);
 85     scanf("%d%d%d%d",&x,&y,&x2,&y2);
 86     dfs1(x,1);
 87     for(i = 1;i <= n;i ++)
 88     {
 89         if(i == 1)
 90         printf("%d",ax[i]);
 91         else
 92         printf(" %d",ax[i]);
 93     }
 94     printf("\n");
 95     for(i = 1;i <= m;i ++)
 96     {
 97         if(i == 1)
 98         printf("%d",ay[i]);
 99         else
100         printf(" %d",ay[i]);
101     }
102     printf("\n");
103     return 0;
104 }

 

posted @ 2013-03-19 22:13  Naix_x  阅读(218)  评论(0编辑  收藏  举报