poj 2573 Bridge(贪心:过河问题)
来源:互联网 发布:关键词优化价钱 编辑:程序博客网 时间:2024/05/22 04:56
开始以为排完序每次直接取相邻的就可以了呢
还以为是考察数据结构的题
WA了之后看别人的题解才知道这是一类问题
在这道题目中分析4个人 “a b c d” 过河情况:
把多种情况列出来会发现只有两种情况可能是最优的
第一种:最快的带最慢的
a c
a
a d
a
第二种:最快的带最慢的和次快的带次慢的
a b
a
c d
b
对于n > 3按照上面策略多次处理,每次可以减去两个人
知道n==3 或 n==2为止
n==2时 输出:a b
n==3时 输出:
a b
a
a c
-------------------------------------------------------------------------------------------
代码如下:
#include <cstdio>#include <iostream>#include <algorithm>#define MAXN 1010using namespace std;int a[MAXN];int main(void) { int n, ans, cost1, cost2; scanf("%d", &n); for(int i=0; i<n; ++i) { scanf("%d", &a[i]); } if(n == 1) { printf("%d\n%d\n", a[0], a[0]); return 0; } sort(a, a+n); int tmp = n; ans = 0; while(tmp > 3) { cost1 = 2*a[0]+a[tmp-1]+a[tmp-2]; cost2 = 2*a[1]+a[0]+a[tmp-1]; ans += min(cost1, cost2); tmp -= 2; } if(tmp == 2) ans += a[1]; else ans += a[0]+a[1]+a[2]; cout << ans << endl; while(n > 3) { cost1 = 2*a[0]+a[n-1]+a[n-2]; cost2 = 2*a[1]+a[0]+a[n-1]; if(cost1 > cost2) printf("%d %d\n%d\n%d %d\n%d\n", a[0], a[1], a[0], a[n-2], a[n-1], a[1]); else printf("%d %d\n%d\n%d %d\n%d\n", a[0], a[n-1], a[0], a[0], a[n-2], a[0]); n -= 2; } if(n == 2) printf("%d %d\n", a[0], a[1]); else { printf("%d %d\n%d\n%d %d\n", a[0], a[1], a[0], a[0], a[2]); } return 0;}
0 0
- poj 2573 Bridge(贪心:过河问题)
- poj 2573 Bridge (过桥问题 贪心)
- POJ-1700 过河问题【贪心】
- 贪心-POJ 1700 过河问题
- POJ 2573 Bridge 贪心
- POJ 1700 经典过河问题(贪心)
- POJ-1700 &&NYOJ 47 过河问题【贪心】
- poj 1700 过河贪心
- poj 1700 贪心过河
- 贪心问题--过河问题
- 【贪心DP】过河问题
- 过河问题 NYOJ 贪心
- poj1700过河问题(贪心)
- 贪心-nyoj-过河问题
- NYOJ45:过河问题【贪心】
- nyoj 过河问题 贪心
- 贪心过河问题
- 贪心算法--过河问题
- hdu 4965 Fast Matrix Calculation【矩阵快速幂】
- PA模块常用表
- 如何去掉空格
- 第一次动手写java的简单代码,实现输出一个空心菱形。
- 装置文章不多
- poj 2573 Bridge(贪心:过河问题)
- springMVC之增删改查
- 总账balance表
- Javascript入门视频教程
- GoodZhang在学Python(二)--Python环境安装配置&HelloWorld
- 【搞搞算法】多目标遗传算法NSGA-II的C语言代码使用手册
- C++ primer 第五版 中文版 练习 8.13 个人 code
- 黑马程序员 【】java学习之路——网络编程之UDP传输简析
- poj 2559 Largest Rectangle in a Histogram