本文主要是介绍uva 10026 Shoemaker's Problem(贪心+排序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
虽然是个水题,但是在一些细节上wa了几次,好像不支持'\b'退格符号,我用在了输出空格那,结果wa了。。。白白
wa了几次。。。题意是看的题解。。今天只写了两道题,速度有点慢,得加快了,以后得先认真读懂题目,题目读懂了
就相当于做出来一半然后仔细动脑想想,有想法了再敲,不能盲目的做题。另外,热烈祝贺今天c++ primer看到
了100页
思路:
这道题是让给的数据是每件工作需要做的天数和每耽误一天所需要的费用,让求一个序列使得付费最小,如果有相同答
案把字典树最小的输出。。。输出的是序号,该件工作所排的序号。。。很明显就是贪心,单个工作所需费用排序,最
高的先做就可以了,注意是double型排序,判断是否等于零的时候不能直接用==,因为是二级排序,而且别忘了取绝
对值,这题没有取绝对值也过了。。。浮点数取绝对值是fabs。。。
贴代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
using namespace std;
struct node
{double d;int pos;
}c[1005];
int cmp(const void *a,const void *b)
{if(fabs(((node *)a)->d - ((node *)b)->d) < 1e-6) return ((node *)a)->pos - ((node *)b)->pos;return ((node *)a)->d - ((node *)b)->d >0? -1:1;
}int main()
{int T,i,n,a,b;cin >> T;while(T--){cin >> n;for(i=1; i<=n; i++){cin >> a >> b;c[i].d = b*1.0/a;c[i].pos = i;}qsort(c+1,n,sizeof(c[0]),cmp);for(i=1; i<=n; i++){cout << c[i].pos;if(i!=n)cout << " ";}//cout << c[i].d << " " << c[i].pos << " ";cout << endl;if(T!=0)cout << endl;}return 0;
}
这篇关于uva 10026 Shoemaker's Problem(贪心+排序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!