zoukankan      html  css  js  c++  java
  • [题解]UVA10026 Shoemaker's Problem

    链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=967

    描述:要做n双鞋子,第 i 双鞋子要做Ti天,每天消耗Si的钱(当前正在做第 i 双鞋子时不耗钱)。求在最少消耗钱的情况下做鞋子的顺序。

    思路:贪心

            明显是一个排序的模型,然后我们就思考顺序怎么确定。考虑当前两双鞋子a和b,它们的顺序对它们前后的鞋子都没有影响,它们所创造的影响仅仅是a和b本身的消耗。顺序是ab时,消耗为Ta*Sb;顺序是ba时,消耗为Tb*Sa。只需要比较Ta*Sb和Tb*Sa的大小排序就可以了。

    我的实现:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 #define MaxN 1020
     7 struct node
     8 {
     9     int Time,Fine,Num;
    10 }Shoe[MaxN];
    11 int T,n;
    12 inline void Get_int(int &Ret)
    13 {
    14     char ch;
    15     bool flag=false;
    16     for(;ch=getchar(),ch<'0'||ch>'9';)
    17         if(ch=='-')
    18             flag=true;
    19     for(Ret=ch-'0';ch=getchar(),ch>='0'&&ch<='9';Ret=Ret*10+ch-'0');
    20     flag&&(Ret=-Ret);
    21 }
    22 bool Cmp(node a,node b)
    23 {
    24     return a.Fine*b.Time > a.Time*b.Fine;
    25 }
    26 int main()
    27 {
    28     Get_int(T);
    29     int i;
    30     while(T--)
    31     {
    32         Get_int(n);
    33         for(i=1;i<=n;++i)
    34         {
    35             Get_int(Shoe[i].Time);
    36             Get_int(Shoe[i].Fine);
    37             Shoe[i].Num=i;
    38         }
    39         sort(Shoe+1,Shoe+1+n,Cmp);
    40         for(i=1;i<n;++i)
    41             printf("%d ",Shoe[i].Num);
    42         printf("%d
    ",Shoe[n].Num);
    43         if(T)
    44             printf("
    ");
    45     }
    46     return 0;
    47 }
    View Code

    状态:

  • 相关阅读:
    HBase 安装设置
    Python中通过函数对象创建全局变量
    Scala 中 构造函数,重载函数的执行顺序
    Hive 安装配置
    976. 三角形的最大周长
    922. 按奇偶排序数组 II
    350. 两个数组的交集 II
    349. 两个数组的交集
    242. 有效的字母异位词
    925. 长按键入
  • 原文地址:https://www.cnblogs.com/CQBZOIer-zyy/p/3840113.html
Copyright © 2011-2022 走看看