USACO 4.2 cowcycle 搜索 DFS
来源:互联网 发布:java校招笔试题 编辑:程序博客网 时间:2024/06/05 16:36
吼吼,趁机秀一秀我的小捷
INPUT FORMAT:
(file cowcycle.in)
第一行是 F 和 R,表示前齿轮和后齿轮的数量。
第二行包括 4 个数字:F1,F2(25 <= F1 < F2 <= 80),R1,R2(5 <= R1 < R2 <= 40)。从 F1 到 F2 型号的前齿轮都是可用的;从 R1 到 R2 型号的后齿轮都是可用的。至少会有一组合法的解。
题目要求:
找出符合下面的标准:
- 前面齿轮的型号(齿的数量)必须在给定的范围内。
- 后面齿轮的型号(齿的数量)必须在给定的范围内。
- 在每一种齿轮组合中,传动比率就是前面齿轮的齿数除以后面齿轮的齿数所得的商。
- 最大的传动比率至少是最小的三倍。
- 齿轮组合的转动比率(已排好序)相邻两项的差的的方差(见下面的例子) 应该达到最小。
计算并确定最佳齿轮组合(其中 F 个前齿轮,R 个后齿轮),使方差最小(传动比率至少是 3x)。
题解:直接搜索所有可能的组合找出符合和条件并方差最小那个组合,我开始一直不敢写觉得直接爆搜会超时,但实在没有想到别的什么办法了只好硬着头皮爆搜,没想到异常顺利的一A了。这道题给的数据不是很强,所以放心爆搜吧。
下面是代码:
#include<cstdio>#include<algorithm>using namespace std;FILE *in,*out;int total,f,r,fs,fe,rs,re,farr[50],rarr[50],ansf[50],ansr[50];double ratio[1000],var;void combf(int s,int e,int index);void combr(int s,int e,int index);void check(void);int main(){ in=fopen("cowcycle.in","r"); out=fopen("cowcycle.out","w"); fscanf(in,"%d%d",&f,&r); fscanf(in,"%d%d%d%d",&fs,&fe,&rs,&re); total=f*r; var=100000000; combf(fs,fe,0); for(int i=0;i<f-1;i++) fprintf(out,"%d ",ansf[i]); fprintf(out,"%d\n",ansf[f-1]); for(int i=0;i<r-1;i++) fprintf(out,"%d ",ansr[i]); fprintf(out,"%d\n",ansr[r-1]); fclose(in); fclose(out); return 0;}void combf(int s,int e,int index){ if(index==f) { combr(rs,re,0); return ; } if(s>e) return ; for(int i=s;i<=e;i++) { farr[index]=i; combf(i+1,e,index+1); }}void combr(int s,int e,int index){ if(index==r) { int fmax=farr[f-1]; int fmin=farr[0]; int rmax=rarr[r-1]; int rmin=rarr[0]; if((fmax*rmax)/(rmin*fmin)<3) return ;//唯一的一个剪枝 check(); return ; } if(s>e) return ; for(int i=s;i<=e;i++) { rarr[index]=i; combr(i+1,e,index+1); }}void check(void){ for(int i=0;i<f;i++) { for(int j=0;j<r;j++) ratio[i*r+j]=(double)farr[i]/rarr[j]; } sort(ratio,ratio+total); for(int i=0;i<total-1;i++) ratio[i]=ratio[i+1]-ratio[i]; double mean=0; for(int i=0;i<total-1;i++) mean+=ratio[i]; mean/=(total-1); double tv=0; for(int i=0;i<total-1;i++) { double diff = ratio[i]-mean; tv+=diff*diff; } tv/=(total-1); if(tv<var) { var=tv; for(int i=0;i<f;i++) ansf[i]=farr[i]; for(int i=0;i<r;i++) ansr[i]=rarr[i]; }}
- USACO 4.2 cowcycle 搜索 DFS
- USACO 4.2.4/cowcycle
- usaco-cowcycle
- Section 4.2 cowcycle
- 【USACO】Subset Sums(双向搜索 dfs)
- hdu 4277 USACO ORZ(dfs搜索+set判重)
- usaco 4.2 Cowcycles(搜索+剪枝)
- USACO Controlling Companies DFS
- 【DFS】 hdu4277 USACO ORZ
- USACO milk3 DFS
- USACO concom DFS
- USACO Superprime Rib(dfs)
- usaco snail trails(dfs)
- 搜索 dfs
- dfs搜索
- DFS搜索
- 搜索dfs
- 【搜索】【USACO】Checker Challenge
- 虚拟机装mac os
- 实现进度条(JSP代码
- WAV,MDI播放
- IT老人的经验 [转]
- Android library projects cannot be launched问题的解决
- USACO 4.2 cowcycle 搜索 DFS
- delphi 进程间通信的两种方法
- DiskGenius磁盘分区恢复文件全过程
- java 网络编程【3】 UDP详解及其相关实例
- SSH 生成execl
- linux上java路径设置
- 半导体技术未来的发展趋势
- Linux 防火墙配置和开关
- CRecordset::Open