11729 Commando War

 //11729     Commando War
/*
题意:n个部下,每个部下需要Bi分钟交待任务,让后Ji分钟后完成任务。
确定一个顺序,使得最早完成任务。
把 说明时间每次累加
求和 每组说明和作业时间和  比较大小即可
贪心
*///AC
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int M=10010;
int s[M][2],s2[M];
int n;
 int cmp(const void *a,const void *b)
{
    int *c = (int *)a;
    int *d = (int *)b;
    if(*c != *d)
        return *d - *c;// return *c - *d;
  return *(c+1) - *(d+1);//  return *(d+1) - *(c+1);//现在是降序
}
int main()
{
    int i,j,k;
    int ct ,ans,t;
    int u ,d;
    ans=0;
    while(scanf("%d",&n)==1)
    {
        if(n==0)break;
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&s[i][1],&s[i][0]);

        }
        qsort(s,n,sizeof(s[0]),cmp);
        ct=0;
        ct=s[0][1];
        s[0][0]+=s[0][1];
        for(i=1;i<n;i++)
        {
             s[i][0]+=s[i][1]+ct;
             ct+=s[i][1];
        }qsort(s,n,sizeof(s[0]),cmp);
        //for(i=0;i<n;i++)printf("%d %d\n",s[i][0], s[i][1]);
        printf("Case %d: %d\n",++ans,s[0][0]);
    }
    //
    return 0;
}
/*
3
2 5
3 2
2 1
3
3 3
4 4
5 5
0
*/
/*//结构体解法
#include<stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=1010;
struct Node
{
    int B,J;
}node[MAXN];
bool cmp(Node a,Node b)
{
    return a.J>b.J;
}
int main()
{
    int n;
    int iCase=0;
    while(scanf("%d",&n) == 1 && n)
    {
        iCase++;
        for(int i=0;i<n;i++)
          scanf("%d%d",&node[i].B,&node[i].J);
        sort(node,node+n,cmp);
        int ans=0;
        int tmp=0;
        for(int i=0;i<n;i++)
        {
            tmp+=node[i].B;
            ans=max(ans,tmp+node[i].J);
        }
        printf("Case %d: %d\n",iCase,ans);
    }
    return 0;
}
*/

posted on 2013-02-06 15:12  ACM_Someone like you  阅读(613)  评论(0编辑  收藏  举报

导航