uva 10026 Shoemaker's Problem _贪心
题意:鞋匠现在有n个工作要做,每个工作要x天,没延迟一天需要付款y,鞋匠每天只能做一个工作,问使得鞋匠最少赔款的工作顺序。
思路:工作和工作之间排序,如果a.value*b.day>b.value*a.day a工作应该排在前面
#include <iostream> #include<cstdio> #include<algorithm> using namespace std; #define N 1010 struct node{ int day; int value; int id; }joy[N]; bool cmp(node a,node b){ return a.value*b.day>b.value*a.day; } int main(int argc, char** argv) { int cas,i,n; scanf("%d",&cas); while(cas--){ scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d%d",&joy[i].day,&joy[i].value); joy[i].id=i+1; } sort(joy,joy+n,cmp); for(i=0;i<n-1;i++) printf("%d ",joy[i].id); printf("%d\n",joy[i].id); if(cas) printf("\n"); } return 0; }
不怕路长,只怕心老.