zoukankan      html  css  js  c++  java
  • nyoj 236 心急的C小加

    心急的C小加

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:4
     
    描述

    C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?

     
    输入
    第一行是一个整数T(1<T<1500),表示输入数据一共有T组。
    每组测试数据的第一行是一个整数N(1<=N<=5000),表示有N个木棒。接下来的一行分别输入N个木棒的L,W(0 < L ,W <= 10000),用一个空格隔开,分别表示木棒的长度和质量。
    输出
    处理这些木棒的最短时间。
    样例输入
    3 
    5 
    4 9 5 2 2 1 3 5 1 4 
    3 
    2 2 1 1 2 2 
    3 
    1 3 2 2 3 1 
    
    样例输出
    2
    1
    3

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    struct record
    {
    	int l;
    	int w;
    } s[2000];
    bool cmp(record a,record b)
    {
    	if(a.w!=b.w)
    	return a.w<b.w;  //对质量 升序排序 
    	else
    	return a.l<b.l;//对长度升序排序 
    }
    int main()
    {
    	int t,n,m,j,i,sum,time;
    	int dp[11000];//此数组记录每个序列最后一个元素的数值大小 
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		for(i=0;i<n;i++)
    		{
    			scanf("%d%d",&s[i].l,&s[i].w);
    			dp[i]=1;
    		}	
    		sort(s,s+n,cmp);   //到这里质量按从小到大排列,则只剩下长度,转化为求单调序列 
    		                  //个数问题 		
    		time=1;    //记录单调序列个数        
    		dp[0]=s[0].l;
    		for(i=1;i<n;i++)          //核心算法
    		{		
    		    m=1;	
    			for(j=0;j<time;j++)
    			{
    				if(dp[j]<=s[i].l)
    				{
    					dp[j]=s[i].l;
    					m=0;
    					break;
    				}
    			}
    			if(m)
    			dp[time++]=s[i].l;
    		}
    		printf("%d
    ",time);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    织梦开发——相关阅读likeart应用
    织梦标签教程
    织梦专题调用代码
    HIT 2543 Stone IV
    POJ 3680 Intervals
    HIT 2739 The Chinese Postman Problem
    POJ 1273 Drainage Ditches
    POJ 2455 Secret Milking Machine
    SPOJ 371 Boxes
    HIT 2715 Matrix3
  • 原文地址:https://www.cnblogs.com/tonghao/p/4525693.html
Copyright © 2011-2022 走看看