zoukankan      html  css  js  c++  java
  • 【贪心】【AOJ-02】Home Work

    Description
    临近开学了,大家都忙着收拾行李准备返校,但I_Love_C却不为此担心!
    因为他的心思全在暑假作业上:目前为止还未开动(-_-!!还以为他有多冷静呢)。

    暑假作业是很多张试卷,我们这些从试卷里爬出来的人都知道,卷子上的题目有选择题、填空题、简答题、证明题等。
    而做选择题的好处就在于工作量很少,但又因为选择题题目都普遍很长。
    如果有5张试卷,其中4张是选择题,最后一张是填空题,很明显做最后一张所花的时间要比前4张长很多。
    但如果你只做了选择题,虽然工作量很少,但表面上看起来也已经做了4/5的作业了。
    I_Love_C决定就用这样的方法来蒙混过关。

    他统计出了做完每一张试卷所需的时间以及它做完后能得到的价值(按上面的原理,选择题越多价值当然就越高咯)。
    现在就请你帮他安排一下,用他仅剩的一点时间来做最有价值的作业。
    Input
    测试数据包括多组。
    每组测试数据以两个整数M,N(1≤M≤20, 1≤N≤10000)开头,分别表示试卷的数目和I_Love_C剩下的时间。
    接下来有M行,每行包括两个整数T,V(1≤T≤N,0<V<10000),分别表示做完这张试卷所需的时间以及做完后能得到的价值!
    输入以0 0结束。
    Output
    对应每组测试数据输出I_Love_C能获得的最大价值。
    保留小数点2位

    Sample Input
    4 20
    4 10
    5 22
    10 3
    1 2
    0 0
    

     
    Sample Output
    37.00
    

     
    Hint
    float的精度可能不够。
    你应该使用double类型。
    注意:每张试卷不一定需要全部做完,做一部分,可以得到一部分的价值。
     
     
    思路:
    因为没张试卷不一定全部做完,所以需要用到平均价值,先做平均价值大的题目
     
    PS:这题拿到了测试数据,在此附上部分测试数据,同学们可以用来检验自己的程序
     
    date.in:
    4 20
    4 10
    5 22
    10 3
    1 2
    19 3907
    224 5203
    744 3612
    2645 2626
    789 5689
    3651 1537
    1669 4593
    1488 2789
    246 6102
    1481 6051
    2604 8048
    2143 8675
    3375 1288
    434 185
    1942 6849
    3836 827
    2335 5038
    956 2569
    634 1835
    2455 2689
    16 9395
    847 6241
    3153 3205
    7195 280
    3444 1706
    7338 9324
    699 878
    8383 1751
    5769 6198
    5392 7680
    5204 9613
    301 2492
    3562 8149
    1480 3776
    971 8208
    1371 2871
    3863 6418
     
    data.out:
    37.00
    28369.33
    33331.16
     
    参考代码:
    #include <iostream> 
    #include <stdio.h> 
    using namespace std; 
      
    typedef struct va //定义一个结构体储存每张试卷所用时间,价值,及平均价值比
    { 
        int time; 
        int val; 
        int index; 
        double val_p; 
    }va; 
      
    void sort(va *s,int n) //冒泡排序
    { 
        int i,j; 
        int tmp; 
        double temp; 
        for(i=0;i<n-1;i++) 
        { 
            for(j=0;j<n-1-i;j++) 
            { 
                if(s[j].val_p<s[j+1].val_p) 
                { 
                    temp=s[j].val_p; 
                    s[j].val_p=s[j+1].val_p; 
                    s[j+1].val_p=temp; 
                    tmp=s[j].time; 
                    s[j].time=s[j+1].time; 
                    s[j+1].time=tmp; 
                    tmp=s[j].val; 
                    s[j].val=s[j+1].val; 
                    s[j+1].val=tmp; 
                } 
            } 
        } 
    } 
      
    int main() 
    { 
    
        va s[10001]; 
        int m,n; 
        int t,v; 
        int j=0,k=0,i=0; 
        double val=0; 
        while(cin>>m>>n&&(m||n)) 
        { 
            val=j=k=i=0; 
            for(i=0;i<m;i++) 
            { 
                cin>>t>>v; 
                s[i].time=t; 
                s[i].val=v; 
                s[i].index=i; 
                s[i].val_p=(double)v/(double)t; 
            } 
            sort(s,m); 
            while(n>0&&m>0) 
            { 
                if(n>=s[j].time) //如果剩余时间足以做完一张试卷,直接减
                { 
                    val+=s[j].val; 
                    n-=s[j].time; 
                    m--; 
                } 
                else
                { 
                    for(k=0;k<s[j].time;k++) //否则每次减1分钟
                    { 
                        val+=s[j].val_p; 
                        n--; 
                        if(n<=0) 
                            break; 
                    } 
                    m--; 
                } 
                j++; 
            } 
            printf("%.2f
    ",val); 
        } 
        return 0; 
    }
  • 相关阅读:
    响应式开发
    webstrom配置
    CSS水平垂直居中
    CSS3里的 转换与过渡动效
    CSS布局
    CSS定宽居中的实现方案
    Flex布局篇2
    编辑器中快速生成代码——emmet输入法
    display:flex实践加感悟
    websocket connet.js
  • 原文地址:https://www.cnblogs.com/ahu-shu/p/3489278.html
Copyright © 2011-2022 走看看