hdu 1051 Wooden Sticks(贪心策略)

来源:互联网 发布:自学计算机游戏编程 编辑:程序博客网 时间:2024/06/14 03:27
//hdu 1051 Wooden Sticks(贪心策略)/*题意:有一堆n木棍。每根的长度和重量都提前知道。棒是由木工机床在一个接一个的方式处理。它需要一些时间,启动时间,呼吁机器准备处理。设置时间与清洁有关操作和改变机器的工具和形状。给出了木工机床的安装时间如下:(a)第一根木棍设置时间是1分钟。(b)后加工一根长度和重量w,机器将不需要设置时间一根长度l和重量w如果l < = l”和w < = w”。否则,它将需要1分钟的设置。解题:经分析可采用贪心策略。先对木棍长度从小到大排,如果长度相等按重量从小到大排。然后进行贪心策略。具体看代码。*/#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int N=5500;struct node{    int len,w;}a[N];int n;int vis[N];int nk;bool cmp(node a1,node b){    if(a1.len<=b.len) return true;    if(a1.w<=b.w&&a1.len==b.len) return true;    return false;}int main(){    int t;    scanf("%d",&t);    while(t--)    {       scanf("%d",&n);       for(int i=0;i<n;i++)       {           scanf("%d%d",&a[i].len,&a[i].w);       }       sort(a,a+n,cmp);       /*for(int i=0;i<n;i++)       {           cout<<a[i].len<<" "<<a[i].w<<endl;       }*/       memset(vis,0,sizeof(vis));       int ansmiu=1;       vis[nk]=a[0].w;       nk=1;       bool flag;       for(int i=1;i<n;i++)       {           flag=false;           for(int j=0;j<nk;j++)           {               if(a[i].w>=vis[j])               {                   flag=true;                   vis[j]=a[i].w;                   break;               }           }           if(flag==false)           {               vis[nk++]=a[i].w;               ansmiu++;           }       }       printf("%d\n",ansmiu);    }    return 0;}

0 0
原创粉丝点击