poj1700多种选择的贪心
2015-07-06 18:06
585 查看
//每次船上至少保证一个人否则船无法移动。 //那么需要安排过去的人以及回来需要的人 //那么每次来回速度最快的人必须在,这样可以节省时间 //分为两种情况:最快的位一组,然后交替回来 //每次送人的时候都有两种情况需要考虑 //第二种情况:每次最快的带着最慢的一起走 //考虑特殊的N=4的情况最小的a,b,最大的y,z 把y,z都运过河的时间同时a,b仍然在左边的时候 //那么 b + a + z + b为第一种情况 2*b + a + z //对于第二种情况显然总时间为 z + a + y + a = 2*a + y+z //那么就有不等式 2*b ? a + y #include <iostream> #include <algorithm> using namespace std; #define For(i,a,b) for(int i=a;i<b;++i) static int w[1005]; int main() { int T; scanf("%d",&T); while(T--) { int N; scanf("%d",&N); For(i,0,N) { scanf("%d",&w[i]); } sort(w,w+N); int ans = 0; int rest = N; int rmax = N-1; if (N==1){ printf("%d\n",w[0]); continue; } while(rest>0) { if (rest==2)//最后剩下肯定是最小的两个 { ans+= w[1]; break; } else if (rest==3) { ans+=w[2]+w[0]+w[1]; break; } else { //每次开始时候最小的两个均在当前左边 if (2*w[1]<w[0]+w[rmax-1])//第一种情况最快的2个交替 { ans += w[1] + w[0] + w[rmax] +w[1]; } else//第二种情况用最大的带着他们过河 { ans +=w[rmax]+w[0]+w[rmax-1]+w[0]; } rmax-=2; rest-=2; } } printf("%d\n",ans); } return 0; }
相关文章推荐
- Javascript SHA-1:Secure Hash Algorithm
- [转]可视化的数据结构和算法
- 统计文件中不小于某一长度的单词的个数(泛型算法实现)
- 使用他人的MD5编码类,修改形成密码串
- Extracting Structured Data from Web Pages
- (译)Cocos2d_for_iPhone_1_Game_Development_Cookbook:1.13使用CCTexture2DMutable调换调色盘
- Java中3DES加密
- Refactoring Notes-Refactoring Methods(3)
- 图书馆管理程序~~不过貌似功能!!有空再修修
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列
- POJ-1003 Hangover
- POJ-1004 Financial Management
- trainging contest#2(2011成都现场赛)I BY Hyoga
- C/C++头文件包含内容概览
- 用单调栈解决最大连续矩形面积问题