| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 42026 人关注过本帖, 47 人收藏
标题:C论坛算法团队 首战 西安电子科技大学OJ
取消只看楼主 加入收藏
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
Problem 1203 - put on make up
Problem 1203 - put on make up

Time Limit: 3000MS   Memory Limit: 65536KB   Difficulty:
Total Submit: 6  Accepted: 2  Special Judge: No


Description

作为coser,化妆是很重要的。于是呢,每次出外景都要求妆娘的行为是不对的(哪里有那么多免费的妆娘让你用呀),所以要自己学啦。那么,要学的话,得先买化妆品对吧~对吧对吧~

于是很欢乐地背着包出去,结果更欢乐地发现了,那个,包,它,有点小了><所以不得不对要买的东西做个规划。

姐姐我现在看上了n种化妆品,但是由于那可怜的小包咱只能买k种,于是我给每个化妆品两个评价标准a和b,现在我希望买的k种化妆品使得ln(a1*a2*…*ak)/ln(b1*b2*…*bk)最大。于是你只要能帮姐姐我算出这个最大值就可以了喵,至于为什么要取ln,只是因为我觉得e是一个比较好玩的数字而已。


Input

多组数据以EOF结束。每组数据第一行包括两个数n和k,接下来两行各有n个数,第一行是每个化妆品对应的评价标准ai,第二行是bi,输入均为整数。

0<k<=n<=10000        10<=bi<=ai<=1000

Output

每组数据输出一行为对应数据的最大值,保留三位有效数字。

Sample Input

3 2
60 50 40
10 20 30

Sample Output

1.511

Hint


Source

d891320478
分析
我怀着忐忑的心情决定尝试贪心算法,还好AC了。

如果在前i个值中选k个得到的最大值为F[i, k]。那么F[i + 1, k] 等于用第i+1个元素替换原k个元素之一得到的最大值。
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    double ln[1001], a[10000], b[10000], ra, rb, mr, tr;
    int n, k, mi, i, j;

    for(i = 10; i <= 1000; i++) ln[i] = log(i);
    for(; scanf("%d%d", &n, &k) != EOF; printf("%.3lf\n", mr))
    {
        for(i = 0; i < n; a[i++] = ln[j]) scanf("%d", &j);
        for(i = 0; i < n; b[i++] = ln[j]) scanf("%d", &j);
        for(ra = rb = i = 0; i < k; i++) ra += a[i], rb += b[i];

        for(mr = ra / rb; i < n; ra -= a[mi], a[mi] = a[i], rb -= b[mi], b[mi] = b[i], i++)
        for(ra += a[i], rb += b[i], mi = i, j = 0; j < k; j++)
        if((tr = (ra - a[j]) / (rb - b[j])) > mr) mr = tr, mi = j;
    }
    return 0;
}

重剑无锋,大巧不工
2012-12-24 21:59
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 131楼 yaobao
关于算法的学习,其实阅读别人的代码帮助并不大,或者说阅读别人的代码的意义并不在算法的学习上。

阅读代码学的是别人的算法实现方法,它的益处在于提高你的编码技巧。但前提是你得理解这个算法。

编码技巧决定的是你的程序写得好坏的问题,而算法决定的是你的能不能写出程序的问题。

呵呵,有没有被绕晕?祝你在计算机的道路上越学越开心。

重剑无锋,大巧不工
2012-12-26 09:34
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
好久没来了。刚完成一个大项目,后续的维护工作也很繁重,恐怕今后也不能像以前那样长时间来这里逛了。

这个解题活动似乎停滞了,呵呵,大概都放假回家休息了吧,希望还在逛论坛的朋友能参与进来,别就这几个人在玩。独乐不如与人乐。

回复Cvirus,可以下载,既然把代码放出来就是为了大家鉴赏学习的,只是别不加改动提交到自己的帐号里就好,最好是学习理解算法后自己实现一下。

回复小伟子,幸会幸会,电气工程主要还是针对强电,把稳态和暂态学好这个专业也就学通了。

重剑无锋,大巧不工
2013-01-25 17:37
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
以下是引用冰冻零点在2013-1-25 20:36:20的发言:

看这个帖子好久了,想参与但是初学没实力,真想解上几道,毕竟这还是我们学校的oj。我们学校学ACM的比较推崇刘汝佳的书,看杨大哥的代码风格有点吃力,还是要争取把自己的实力提升上去!

呵呵,看来这个问题要重视了,以后我会把代码写的更易懂一些。

其实我这种风格的形成与ACM不无关系,起初为的是尽量缩短代码量,所以就尽可能地利用C语言的各种语法技巧。

当然,话说回来,能把我的代码读通,那估计也就没什么代码读不了了(混乱代码大赛级的除外)。

重剑无锋,大巧不工
2013-01-25 20:55
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 128楼 wanghai123
排序范围不对
sort(b,b+k); 改成sort(b,b+n);

重剑无锋,大巧不工
2013-02-07 22:11
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
欢迎新朋友的加入,好久没整理这贴子了,重新统计一下已完成的题目

1001 1002 1003 1004 1005 1006 1007 1008 1009 1010

1011 1012 1013 1014 1015 1016 1017 1018 1019 1020

1021 1022 1023 1024 1025 1026 1027 1028 1029 1030

1031 1032 1033 1034 1035 1036 1037 1038 1039 1040

1041 1042 1043 1049

1053 1054 1055

1061 1069

1076

1103 1104 1109

1121 1130

1178

1201 1202 1203 1204 1205 1206 1207 1209

1215

重剑无锋,大巧不工
2013-04-04 12:54
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 143楼 mathlover
你好,具体问题我标在备注里了,多数是你写的时候笔误造成的,这种bug是不可能通过编译器的语法分析发现的,所以一定要细心。

程序代码:
int cal(point p[], int n)//主体函数
{
    int i,j,l,max=0;
    for(i = 0; i < n; i++)
    {
        for(j = i + 1; j < n; j++)
            k[j-i-1]=(p[i].x==p[j].x)?INF:(p[i].y-p[j].y)*1.0/(p[i].x-p[j].x);//计算斜率
        qsort(k,n-i-1, sizeof(double),comp);
        for(j = 0; j < n-i;)//范围应该是n-i-1,你的范围溢出了
        {
            for(l=j+1;l< n-1;l++)//这个范围就更不对了,应该还是n-i-1
                if(fabs(k[l]-k[j])>EPS)
                    break;
            max=(l-j>max)?(l-j):max;
            j=l;
        }
    }
    return max+1;
}

重剑无锋,大巧不工
2013-04-04 17:13
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 147楼 C_戴忠意
小戴好久不见,忙什么呢?

重剑无锋,大巧不工
2013-04-13 21:20
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
以下是引用如蜗牛在2013-4-13 18:37:41的发言:

追问:
这个程序在VC6.0上是无法正常运行的,尤其输入多组数据的结束,求楼上大牛解释!!!
我不知道你说的是哪个程序,怎么个无法正常运行,也不知道你需要我解释什么,很报歉。

重剑无锋,大巧不工
2013-04-13 21:22
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 151楼 C_戴忠意
呵呵,玩过一点,不过都是基于51芯片的。一直想玩玩ARM,但一直没时间。

重剑无锋,大巧不工
2013-04-15 18:22
快速回复:C论坛算法团队 首战 西安电子科技大学OJ
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044049 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved