程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1051 Wooden Sticks

hdu 1051 Wooden Sticks

編輯:C++入門知識

 

這個題直接用貪心做。
題意就是一個機器重置一次要一分鐘,只要長度和重量都比前一次小則不用重置機器,可以直接加工。求重置最少的次數。


首先對它排序,然後一個一個找滿足條件的,並標記這個已經被加工了,被加工的不需要在加工。


AC代碼:

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

struct Node
{
    int w,l;
    int y;   //標記
} a[5010];

bool cmp(Node a, Node b)
{
    if(a.l == b.l)
        return a.w > b.w;
    return a.l > b.l;
}

int main()
{
    int t,n,i,j,p,weight;
    scanf("%d",&t);
    while(t--)
    {
        p = 0;
        scanf("%d",&n);
        for(i = 0; i < n; i++)
        {
            scanf("%d%d",&a[i].l,&a[i].w);
            a[i].y = 1;
        }
        sort(a,a+n,cmp);
        for(i = 0; i < n; i++)
        {
            if(a[i].y == 1)   //如果這個沒有被用過,則時間加一
            {
                a[i].y = 0;   //標記這個已經用了
                p++;          //時間加一
                weight = a[i].w; //更新最大重量
                for(j = i+1; j < n; j++)  //往後繼續尋找
                {
                    if(a[j].w <= weight && a[j].y == 1)  //重量小於等於最大重量的並且沒有被用過的則用
                    {
                        a[j].y = 0;
                        weight = a[j].w;    //更新重量
                    }
                }
            }
        }
        printf("%d\n",p);
    }

    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved