Wooden Sticks
来源:互联网 发布:数据对比分析的方法 编辑:程序博客网 时间:2024/06/04 01:11
Problem Description
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).
(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
213
这道题一开始写的时候是将木头的长度和重量同时相加求和,然后按这个排序,再开始逐步模拟这个过程,每次寻找比当前的木头长度长,
重量重的木头,然后将当前的木头长度,重量置为-1,反复这个过程,每结束一次这个过程即找不到时,分钟数+1,最后输出。后来发现,
排序要按照长度,重量的二级排序来,很郁闷吧,本来逻辑没问题,可惜因为一个二级排序过不了。#include<cstdio>#include<algorithm>#include<cstring>using namespace std;struct student{ int length; int weight;}STU[5200],STU1[5200];bool comp(struct student a,struct student b){ if(a.length<b.length) return true; else { if(a.length==b.length) { if(a.weight<b.weight) return true; else return false; } else return false; }}int main(){ int i,n,j,k,t,sum,z; scanf("%d",&n); while(n) { scanf("%d",&z); for(i=0;i<z;i++) scanf("%d %d",&STU[i].length,&STU[i].weight); sort(STU,STU+z,comp); for(i=0,t=0,sum=1;i<z;i++) { if((STU[i].length==-1)&&(STU[i].weight==-1)) continue; STU1[t].length=STU[i].length,STU1[t].weight=STU[i].weight,t++; STU[i].length=-1,STU[i].weight=-1; for(j=i+1;j<z;j++) { if((STU[j].length==-1)&&(STU[j].weight==-1)) continue; if((STU[j].length>=STU1[t-1].length)&&(STU[j].weight>=STU1[t-1].weight)) { STU1[t].length=STU[j].length,STU1[t].weight=STU[j].weight,t++; STU[j].length=-1,STU[j].weight=-1; } else continue; } } for(i=0,sum=1;i<t-1;i++) { if((STU1[i].length<=STU1[i+1].length)&&(STU1[i].weight<=STU1[i+1].weight)) continue; else sum++; } printf("%d\n",sum); n--; } return 0;}
阅读全文
0 0
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- Wooden Sticks
- CS R25 C(BFS+二维前缀和) D(好题,合理枚举+树状数组维护) E(建图,连通分量,割点)
- 关于C和C++中static关键字的详解
- number 二分答案
- 【模板】欧拉筛
- Python3 数据结构
- Wooden Sticks
- hihoCoder 1430 A Boring Problem(数论)
- mysql 安装
- Sequence_Stack(顺序栈的实现)
- Codeforces Round #396(Div. 2) C. Mahmoud and a Message (dp)
- LinuxStudyNote(41)-RPM包的依赖性、树形依赖、环形依赖解决方法、模块依赖
- Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
- 14调整数组顺序使奇数位于偶数前面python
- gtk图形界面编程day03