Shoemaker's Problem
来源:互联网 发布:金融软件开发商 编辑:程序博客网 时间:2024/05/24 05:17
Shoemaker's Problem
本题为贪心算法题,不要想多了,就只是一个贪心算法。
一个"鞋匠",有n件工作要做,每件工作需要做Ti天,从第一天开始,到开始做该工作的这段时间,每天要付Si元费用。问按怎样一个顺序做能让鞋匠付的钱最少。
每一件工作,开始的时间越晚,需要付的钱(对于该项工作来说)就越多。做完所有工作的时间是不变的,但是工作的顺序是可变的。而没件工作的罚款比率不同(天数每天罚钱数的比)。对于所有的工作来说,比率越小的,放在越前面做,总体罚钱的数就会越少。所以,我们只要算出比率,排序后输出序号就好了。
这里又有问题了,细心的孩子会发现,在同一组案例中。可能会有1件以上的工作他的这个比率一样,那又怎么办呢?题目说了,要是有几个符合要求的答案,输出字典序最小的那一个。也就是说,要是比率一样的话,就按开始输入的顺序排序就好了(序号)。
其实真的很简单,就是输入,存储,算比率,排序,输出就好了。我承认我想多了,和杭电上的一个做作业的动归题搞混思想了。
#include<stdio.h>#include<algorithm>using namespace std;struct node{ int num; int time; int cent; double bi;} shoe[1005];bool cmp(node a,node b) //排序{ if(a.bi==b.bi) //比率相同,按输入顺序排序 return a.num<b.num; return a.bi<b.bi; //比率小的排前面}int main(){ int t; int n; int i; int f=0; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0; i<n; i++) //输入 { shoe[i].num=i+1; scanf("%d%d",&shoe[i].time,&shoe[i].cent); shoe[i].bi=(double)shoe[i].time/shoe[i].cent; //算比率,记得数据类型强制装换 } sort(shoe,shoe+n,cmp); //排序 if(f)printf("\n"); //案例之间有空行,这里处理不好,UVA会直接返回WRONG ANSWER printf("%d",shoe[0].num); //输出 for(i=1; i<n; i++)printf(" %d",shoe[i].num); printf("\n"); f=1; } return 0;}
- Shoemaker's Problem
- 10026 - Shoemaker's Problem
- UVa10026 - Shoemaker's Problem
- 10026 - Shoemaker's Problem
- uva10026 - Shoemaker's Problem
- UVaOJ10026 - Shoemaker's Problem
- Shoemaker's Problem
- Shoemaker's Problem
- 110405 Shoemaker's Problem
- UVA Shoemaker's Problem
- 10026 - Shoemaker's Problem
- uva10026 - Shoemaker's Problem
- UVa 10026 - Shoemaker's Problem
- uva 10026 - Shoemaker's Problem
- uva 10026 - Shoemaker's Problem
- uva 10026 - Shoemaker's Problem
- uva 10026 Shoemaker's Problem
- UVa 10026 - Shoemaker's Problem
- View 5部署之一:vSphere 5安装及基本设置
- 黑马程序员------面向对象(No.7)(内部类、异常概述、异常try-catch、异常声明throws、多异常处理)
- 测试过程中,如何改变python的工作目录,并引用新目录下的其他模块或文件
- HDU4720
- 次小生成树 POJ 1679
- Shoemaker's Problem
- XML简介及DOM技术
- 嵌入式学习 ---- 基本概念
- 单链表
- 易语言零基础新手入门系列教程第三课 - 变量
- jquery操作Select
- POJ 2234 Nim
- 一天一天学 windows phone 控件 之 ItemsControl + ListBox(十五)
- 环境变量