推荐博客

http://www.cnblogs.com/KirisameMarisa/p/4187637.html

-----------------------------------------------------------

http://poj.org/problem?id=2976

二分

 1 #include "iostream"
 2 #include <algorithm>
 3 #include <cmath>
 4 #include <stdio.h>
 5 using namespace std;
 6
 7 #define ll long long
 8 #define eps 1e-8
 9 const int maxn = 1009;
10 double a[maxn], b[maxn], d[maxn];
11 int n, k;
12
13 double cheak(double mid) {
14     for(int i = 0; i < n; ++i) d[i] = a[i]-mid*b[i];
15     sort(d, d+n);
16     double sum = 0;
17     for(int i = 0; i < k; ++i) sum += d[n-1-i];
18     return sum;
19 }
20
21 int main() {
22 #ifdef wenbao
23     freopen("in", "r", stdin);
24 #endif
25     while(~scanf("%d%d", &n, &k)) {
26         if(n == 0 && k == 0) break;
27         k = n-k;
28         for(int i = 0; i < n; ++i) scanf("%lf", &a[i]);
29         for(int i = 0; i < n; ++i) scanf("%lf", &b[i]);
30         double l = 0.0, r = 1000000000.0, mid;
31         while(fabs(r-l) > eps) {
32             mid = (r+l)/2.0;
33             if(cheak(mid) >= 0) l = mid;
34             else r = mid;
35         }
36         printf("%.0lf\n", floor(l*100+0.5));
37     }
38     return 0;
39 }

迭代

 1 #include "iostream"
 2 #include <algorithm>
 3 #include <cmath>
 4 #include <stdio.h>
 5 using namespace std;
 6
 7 #define ll long long
 8 #define eps 1e-8
 9 const int maxn = 1009;
10 double a[maxn], b[maxn], d[maxn];
11 int id[maxn], n, k;
12
13 bool cmp(int x, int y) {
14     return d[x] > d[y];
15 }
16
17 double cheak(double l) {
18     for(int i = 0; i < n; ++i) d[i] = a[i]-l*b[i], id[i] = i;
19     sort(id, id+n, cmp);
20     double sum1 = 0.0, sum2 = 0.0;
21     for(int i = 0; i < n-k; ++i) sum1 += a[id[i]], sum2 += b[id[i]];
22     return sum1/sum2;
23 }
24
25 int main() {
26 #ifdef wenbao
27     freopen("in", "r", stdin);
28 #endif
29     while(~scanf("%d%d", &n, &k)) {
30         if(n == 0 && k == 0) break;
31         for(int i = 0; i < n; ++i) scanf("%lf", &a[i]);
32         for(int i = 0; i < n; ++i) scanf("%lf", &b[i]);
33         double l = 0.0, r;
34         while(1) {
35             r = cheak(l);
36             if(fabs(r-l) < eps) break;
37             l = r;
38         }
39         printf("%.0lf\n", floor(l*100+0.5));
40     }
41     return 0;
42 }

----------------------------------------------------------

http://poj.org/problem?id=2728

最小生树上的最优

二分

 1 #include "iostream"
 2 #include <queue>
 3 #include <string.h>
 4 #include <cmath>
 5 #include <stdio.h>
 6 using namespace std;
 7
 8 #define eps 1e-4
 9 const int maxn = 1009;
10 int n;
11 double a[maxn], b[maxn], c[maxn], cost[maxn][maxn], di[maxn][maxn], dist[maxn];
12
13 double prim(double x) {
14     double ans = 0.0;
15     for(int i = 2; i <= n; ++i){
16         dist[i] = cost[1][i] - x*di[1][i];
17     }
18     dist[1] = -1;
19     int k;
20     for(int i = 2; i <= n; ++i){
21         double mi = 10000000000000.0;
22         for(int j = 1; j <= n; ++j){
23             if(dist[j] != -1 && dist[j] < mi){
24                 mi = dist[j];
25                 k = j;
26             }
27         }
28         dist[k] = -1;
29         ans += mi;
30         for(int j = 1; j <= n; ++j){
31             if(dist[j] != -1 && dist[j] > cost[k][j] - x*di[k][j]){
32                 dist[j] = cost[k][j] - x*di[k][j];
33             }
34         }
35     }
36     return ans;
37 }
38
39 int main(){
40 #ifdef wenbao
41     freopen("in", "r", stdin);
42 #endif
43     while(~scanf("%d", &n) && n){
44         for(int i = 1; i <= n; ++i){
45             scanf("%lf%lf%lf", &a[i], &b[i], &c[i]);
46             for(int j = 1; j < i; ++j){
47                 double x = (a[i]-a[j])*(a[i]-a[j]) + (b[i]-b[j])*(b[i]-b[j]);
48                 cost[j][i] = cost[i][j] = (c[i] > c[j]) ? c[i] - c[j] : c[j] - c[i];
49                 di[i][j] = di[j][i] = sqrt(x);
50             }
51         }
52         double l = 0.0, r = 100000.0, mid;
53         while((r-l) > eps){
54             //cout<<l<<"&&"<<r<<endl;
55             mid = (l+r)/2.0;
56             if(prim(mid) >= 0){
57                 l = mid;
58             }else{
59                 r = mid;
60             }
61         }
62         printf("%.3lf\n", l);
63     }
64     return 0;
65 }

迭代

 1 #include "iostream"
 2 #include <queue>
 3 #include <string.h>
 4 #include <cmath>
 5 #include <stdio.h>
 6 using namespace std;
 7
 8 #define eps 1e-4
 9 const int maxn = 1009;
10 int n, id[maxn];
11 double a[maxn], b[maxn], c[maxn], cost[maxn][maxn], di[maxn][maxn], dist[maxn];
12 bool vis[maxn];
13
14
15 double prim(double x) {
16     memset(vis, false, sizeof(vis));
17     for(int i = 2; i <= n; ++i) dist[i] = cost[1][i] - di[1][i]*x, id[i] = 1;
18     vis[1] = true, dist[1] = 0;
19     int k;
20     double sum1 = 0.0, sum2 = 0.0;
21     for(int i = 2; i <= n; ++i){
22         double mi = 100000000000.0;
23         for(int j = 2; j <= n; ++j){
24             if(!vis[j] && dist[j] < mi){
25                 k = j, mi = dist[j];
26             }
27         }
28         vis[k] = true;
29         sum1 += cost[id[k]][k], sum2 += di[id[k]][k];
30         for(int j = 2; j <= n; ++j){
31             if(!vis[j] && dist[j] > cost[k][j] - di[k][j]*x){
32                 dist[j] = cost[k][j] - di[k][j]*x;
33                 id[j] = k;
34             }
35         }
36     }
37     return sum1/sum2;
38 }
39
40 int main(){
41 #ifdef wenbao
42     freopen("in", "r", stdin);
43 #endif
44     while(~scanf("%d", &n) && n){
45         for(int i = 1; i <= n; ++i){
46             scanf("%lf%lf%lf", &a[i], &b[i], &c[i]);
47             for(int j = 1; j < i; ++j){
48                 double x = (a[i]-a[j])*(a[i]-a[j]) + (b[i]-b[j])*(b[i]-b[j]);
49                 cost[j][i] = cost[i][j] = (c[i] > c[j]) ? c[i] - c[j] : c[j] - c[i];
50                 di[i][j] = di[j][i] = sqrt(x);
51             }
52         }
53         double l = 0.0, r;
54         while(1){
55             r = prim(l);
56             if(fabs(r-l) < eps){
57                 break;
58             }else{
59                 l = r;
60             }
61         }
62         printf("%.3lf\n", l);
63     }
64     return 0;
65 }

----------------------------------------------------------

-----------------------------------------------------------

只有不断学习才能进步!

转载于:https://www.cnblogs.com/wenbao/p/7630185.html

wenbao与最优比率生成树相关推荐

  1. poj2728(最优比率生成树)

    1.最优比率生成树(最优比例生成树): 定义:有向带权图G, 对于图中每条边e[i], 都有cost[i]权值)和dist[i](距离), 要求的是一棵生成树T, 它使得 ∑(cost[i]) / ∑ ...

  2. [USACO]地震 (二分答案+最优比率生成树详解)

    题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...

  3. 转载二分 01 分数规划即最大化平均值的证明0/1分数规划、最优比率生成树、最优比率环

    首页 新随笔 联系 管理 订阅 随笔- 20  文章- 0  评论- 9 [Algorithm]01分数规划--Update:2012年7月27日 [关键字] 0/1分数规划.最优比率生成树.最优比率 ...

  4. POJ 2728 最优比率生成树

    题意:      让你求一颗最小比率生成树. 思路:      我总结过了,在这里:http://blog.csdn.net/u013761036/article/details/26666261   ...

  5. POJ 2728 Desert King [最优比率生成树]

    RT 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 凭什么!一模一样的代码一个TLE一个AC,改小二分范围和精度才过 凭什么! 我眼睁睁的看着那段代码 ...

  6. poj 2728(最小比率生成树)

    参考题解:http://www.cppblog.com/jh818012/articles/167743.html 题意:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一条 ...

  7. 【POJ - 2728】Desert King (最有比率生成树,分数规划)

    题干: David the Great has just become the king of a desert country. To win the respect of his people, ...

  8. POJ 3621:Sightseeing Cows(最优比率环)

    http://poj.org/problem?id=3621 题意:有n个点m条有向边,每个点有一个点权val[i],边有边权w(i, j).找一个环使得Σ(val) / Σ(w)最大,并输出. 思路 ...

  9. POJ 3621 最优比率生成环

    题意:让你求出一个最优比率生成环. 思路:又是一个01分化基础题目,直接在jude的时候找出一个sigma(d[i] * x[i])大于等于0的环就行了,我是用SPFA跑最长路判断的环,这里注意一点就 ...

最新文章

  1. Java常量字符串String理解
  2. 文巾解题 11. 盛最多水的容器
  3. python大于等于怎么表示_如何在rejectdb中应用python lambda表达式中的大于等于
  4. spring jms同时使用queue和持久topic订阅
  5. “阿里女员工被侵害”案最新进展:两人涉嫌强制猥亵
  6. 单元测试的编写(asp.net) (VS2017)
  7. 成长有三方面,其中最重要的是
  8. JavaWeb 基础系列篇
  9. 【Docker】问题汇总
  10. 基于Multisim的MC1496调幅电路的仿真
  11. 【单片机仿真】(一)Proteus8.9 安装教程
  12. 计算机视觉教程(第2版)1-8章期末复习
  13. 03、STM8程序下载方法
  14. 使用 NetCat 工具实现远程文件传输
  15. SuperMap iDesktop地质体模型匹配地形——精修地质体模型路线
  16. FPGA驱动mipi 光固化 4K屏
  17. U-BOOT小全(二)
  18. JavaSe9.29 集合
  19. 敢不敢再大一点?三星“盖世牛”二代Galaxy Note II发布!
  20. 【大学物理·恒定电流的磁场】磁感应强度

热门文章

  1. hashtable——散列表
  2. JavaScript——创建对象
  3. java 高效批量插入 sqlserver 数据库
  4. Jmeter初学(一)
  5. 汉字转拼音缩写的函数以及其他函数
  6. [转] 前端异常监控解决方案研究
  7. 深入理解 Unix / Linux 命令
  8. 微信小程序:一个json帮你完成分享朋友圈图片
  9. git经常使用命令和问题
  10. spring bean的初始化和销毁