• HDU


    •                         Wooden Sticks

    •      Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
              Total Submission(s): 23527    Accepted Submission(s): 9551

    There is a pile of n wooden sticks. The length and weight of each stick are known in advance. The sticks are to be processed by a woodworking machine in one by one fashion. It needs some time, called setup time, for the machine to prepare processing a stick. The setup times are associated with cleaning operations and changing tools and shapes in the machine. The setup times of the woodworking machine are given as follows:

    (a) The setup time for the first wooden stick is 1 minute.
    (b) Right after processing a stick of length l and weight w , the machine will need no setup time for a stick of length l' and weight w' if l<=l' and w<=w'. Otherwise, it will need 1 minute for setup.

    You are to find the minimum setup time to process a given pile of n wooden sticks. For example, if you have five sticks whose pairs of length and weight are (4,9), (5,2), (2,1), (3,5), and (1,4), then the minimum setup time should be 2 minutes since there is a sequence of pairs (1,4), (3,5), (4,9), (2,1), (5,2).

    Input

    The input consists of T test cases. The number of test cases (T) is given in the first line of the input file. Each test case consists of two lines: The first line has an integer n , 1<=n<=5000, that represents the number of wooden sticks in the test case, and the second line contains n 2 positive integers l1, w1, l2, w2, ..., ln, wn, each of magnitude at most 10000 , where li and wi are the length and weight of the i th wooden stick, respectively. The 2n integers are delimited by one or more spaces.

    Output

    The output should contain the minimum setup time in minutes, one per line.

    Sample Input

    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

    Sample Output

    2
    1
    3

    题意:将一堆木棍进行加工,如果后一个木棍比前一个的长度重量都小则不需要改动,否则将花费一分钟时间改动。最后输出总时间。

    思路:可使用sort将木棍按长度从大到小排序,长度相等时按重量从大到小排。然后从第一个开始按照重量进行判断,循环求出结果。(在循环时,长度一定减小,所以只需关注重量)

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    struct woodn
    {
    	int l;
    	int w;
    	bool flag;
    }wood[5005];
    
    bool comp(struct woodn a,struct woodn b)
    {
    	if (a.l != b.l)
    	{
    		return a.l > b.l;
    	}
    	else
    	{
    		return a.w > b.w;
    	}
    }
    int main()
    {
    	int T, n;
    	scanf("%d", &T);
    	while (T--)
    	{
    		int min_w=0; 
    		scanf("%d", &n);
    		for (int i = 0; i < n; i++)
    		{
    			scanf("%d %d", &wood[i].l, &wood[i].w);
    			wood[i].flag = false;
    		}
    		sort(wood, wood + n, comp);
    		int num = 0;
    
    		for (int i = 0; i < n; i++)
    		{
    			if (wood[i].flag)
    			{
    				continue;
    			}
    			min_w = wood[i].w;
    			for (int j = i + 1; j < n; j++)
    			{
    				if (min_w >= wood[j].w&&!wood[j].flag)
    				{
    					min_w = wood[j].w;
    					wood[j].flag = true;
    				}
    			}
    			num++;
    		}
    		printf("%d
    ", num);
    	}
    	return 0;
    }



  • 相关阅读:
    G. Yash And Trees 线段树 + dfs序 + bitset
    网络流最小割 H
    P2764 最小路径覆盖问题 网络流重温
    P4016 负载平衡问题 网络流重温
    D. Yet Another Subarray Problem 思维 难 dp更好理解
    J
    20190709 暑训 区间种类数 莫队的学习
    E
    线段树 离散化 E. Infinite Inversions E. Physical Education Lessons
    CbsPersist
  • 原文地址:https://www.cnblogs.com/csu-lmw/p/9124477.html
Copyright © 2020-2023  润新知