Uva 10026 Shoemaker's Problem

来源:互联网 发布:数据库同步工具 编辑:程序博客网 时间:2024/06/15 00:33
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=967
题目:附件
题意:一个工匠有多个任务要做,每个工作需要花费一定的时间t,但是耽误一天要交一定的罚金f,安排工作顺序使得总罚金最少。
题解:贪心。假设有 i 和 j 两件工作要做,分别有ti,fi,tj,fj,先做 i 的罚金是 ti*fj,先做j的罚金是 tj*fi。假设 ti*fj<tj*fi, 等价于 fi/ti>fj/tj.所以应该先做 f/t 更大的工作可以是的罚金最少。参考:http://www.cnblogs.com/xiaobaibuhei/p/3226776.html
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAX=1000+10;struct type{double rate;int num;type(double rate=0,int num=0):rate(rate),num(num){};};type a[MAX];bool cmp(type a,type b){return a.rate>b.rate;}int main(){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=0;i<n;i++){int t,f;scanf("%d%d",&t,&f);a[i]=type(double(f)/t,i+1);}stable_sort(a,a+n,cmp);for(int i=0;i<n;i++){printf("%d%c",a[i].num,i==n-1?'\n':' ');}if(T) putchar(10);}return 0;}


原创粉丝点击