您的位置:首页 > 其它

USACO 4.2 Cowcycles(DFS)

2013-03-19 22:13 591 查看
使劲水啊。。。数据量太唬人了。。普通DFS就能过。。。看懂题意就好。。看不懂题是硬伤啊。。

/*
ID: cuizhe
LANG: C++
TASK: cowcycle
*/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <ctime>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int o1[101],o2[101],ax[15],ay[15];
double arry[101],d[101];
int x,y,x2,y2,n,m;
double minz = 100000000;
void dfs2(int str,int step)
{
int i,j,num = 0;
double ans = 0,sum = 0;
if(step > m)
{
if(o1
*o2[m] >= 3*o1[1]*o2[1])
{

for(i = 1;i <= n;i ++)
{
for(j = 1;j <= m;j ++)
{
arry[num++] = (o1[i]*1.0/o2[j]);
}
}
sort(arry,arry+num);
for(i = 0;i < num-1;i ++)
{
d[i] = arry[i+1] - arry[i];
sum += d[i];
}
sum = sum/(num-1);
for(i = 0;i < num-1;i ++)
{
ans += (d[i]-sum)*(d[i]-sum);
}
ans = ans/(num-1);
if(minz > ans)
{
minz = ans;
for(i = 1;i <= n;i ++)
ax[i] = o1[i];
for(i = 1;i <= m;i ++)
ay[i] = o2[i];
}
}
return ;
}
for(i = str;i <= y2;i ++)
{
o2[step] = i;
dfs2(i+1,step+1);
}
}
void dfs1(int str,int step)
{
int i;
if(step > n)
{
dfs2(x2,1);
return;
}
for(i = str;i <= y;i ++)
{
o1[step] = i;
dfs1(i+1,step+1);
}
return ;
}
int main()
{
int i;
freopen("cowcycle.in","r",stdin);
freopen("cowcycle.out","w",stdout);
scanf("%d%d",&n,&m);
scanf("%d%d%d%d",&x,&y,&x2,&y2);
dfs1(x,1);
for(i = 1;i <= n;i ++)
{
if(i == 1)
printf("%d",ax[i]);
else
printf(" %d",ax[i]);
}
printf("\n");
for(i = 1;i <= m;i ++)
{
if(i == 1)
printf("%d",ay[i]);
else
printf(" %d",ay[i]);
}
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: