poj1065(木棍加工贪心)

来源:互联网 发布:厦门市大数据管理中心 编辑:程序博客网 时间:2024/04/28 17:26

【题意】

有n根木棒,已知他们的质量和长度,需对他们进行加工,开机1分钟,加工一根一分钟,

且每次开机后,加工的第i+1根必须比第i根的长度和质量都要大才行,问最短加工时间。

【输入】

第一行T表示T组数据。

每组数据第一行一个N,表示几根木棒。

然后N个二元组,表示每根木棒的长度与质量。

【输出】

对于每组数据,输出最短加工时间。

思路:

按照长度小到大排序,长度相等则按照重量小到大排序,先找第一次能加工的序列,然后以这个为标准继续找,直到找不到,这就是第一次加工

继续这样直到全部加工

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct wood{    int len;    int wight;    int flag ;}w[10005];bool cmp(wood a,wood b){    if(a.len == b.len)        return a.wight < b.wight;    else        return a.len < b.len;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        int m;        scanf("%d",&m);        for(int i = 0; i < m; i++)        {            scanf("%d%d",&w[i].len,&w[i].wight);            w[i].flag = 0;        }        sort(w,w+m,cmp);        int sum = 0,count = 0;        for(int i = 0; i < m; i++)        {            if(w[i].flag == 0)            {                int k = i;                sum++;w[i].flag = 1;//加工过的做标记                for(int j = i+1;j < m ; j++)                {                    if(!w[j].flag &&w[k].wight <= w[j].wight)//找能加工的并且没有用过的加工                    {                        k = j;//                        w[j].flag = 1;                    }                }            }        }        printf("%d\n",sum);    }    return 0;}


原创粉丝点击