Section 4.2 cowcycle

/*
ID: niepeng1
PROG: cowcycle
LANG: C++
*/
/*
 俺晕,如此暴力竟然没有超时......
*/
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <functional>
using namespace std;
const double minner = 1e-13;

int F,R,F1,F2,R1,R2;
int CreatF[21];
int CreatR[21];
double bestvar;
int bestF[21];
int bestR[21];
double map[81][41];
double S[100];
void Check(){
 if(CreatF[F-1]*CreatR[R-1]<3*CreatF[0]*CreatR[0]) return;//这个条件极为诡异,把速度直接提升了无数倍,我晕
 int i,j,num=0;
 double m=0.0,var=0.0;
 for(i=F-1;i>=0;i--)
  for(j=0;j<R;j++)
  {
   S[num++]=map[CreatF[i]][CreatR[j]];//map[CreatF[i]][CreatR[j]]
  }
 sort(S,S+num,greater<double>());
 num--;
 for(i=0;i<num;i++){
  S[i] -= S[i+1];
  m+=S[i];
  var+=S[i]*S[i];
 }
 m/=num;
 var=var/num-m*m;
 if( var < bestvar){
  bestvar=var-minner;
  for(i=0;i<F;i++) bestF[i]=CreatF[i];
  for(i=0;i<R;i++) bestR[i]=CreatR[i];
 }
}
void CreateR(int num,int least){
 if(num==R){
  Check();
  return;
 }
 for(int i=least;i<=R2;i++){
  CreatR[num]=i;
  CreateR(num+1,i+1);
 }
}
void CreateF(int num,int least){
 if(num==F){
  CreateR(0,R1);
  return;
 }
 for(int i=least;i<=F2;i++){
  CreatF[num]=i;
  CreateF(num+1,i+1);
 }

}
int main() {
 int i,j;
 freopen("cowcycle.in","r",stdin);
 freopen("cowcycle.out","w",stdout);
 scanf("%d%d%d%d%d%d",&F,&R,&F1,&F2,&R1,&R2);
 for(i=F1;i<=F2;i++)
  for(j=R1;j<=R2;j++)
   map[i][j]=(double)(i+0.0)/j;
    bestvar=1e100;
 CreateF(0,F1);

 for(i=0;i<F;i++){
  if(i==F-1) printf("%d/n",bestF[i]);
  else printf("%d ",bestF[i]);
 }
 for(i=0;i<R;i++){
  if(i==R-1) printf("%d/n",bestR[i]);
  else printf("%d ",bestR[i]);
 }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值