zoukankan      html  css  js  c++  java
  • 零件分组(stick)

    某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(Wi)。现在为了加工需要,要将它们分成若干组,使每一组的零件都能排成一个长度和重量都不下降(若i<j,则Li<=Lj,Wi<=Wj)的序列。请问至少要分成几组?

    输入

    第一行为一个整数N(N<=1000),表示零件的个数。第二行有N对正整数,每对正整数表示这些零件的长度和重量,长度和重量均不超过10000。

    输出

    仅一行,即最少分成的组数。

    样例

    STICK.IN

    5

    8 4 3 8 2 3 9 7 3 5

    STICK.OUT

    2

     1 #include <iostream>
     2 #include <memory.h>
     3 #include <stdio.h>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 typedef pair<int,int> Group;
     8 Group group[1000];
     9 int flag[1000];///
    10 int greedy(int cnt){
    11     int count = cnt;
    12     int num_group = 0;
    13     int mid;
    14     memset(flag,0,sizeof(flag));
    15         for(int i = 0; i < cnt; i++){
    16             if(flag[i] == 0){
    17                 ///查找以该元素为起点,依次递增的元素
    18                 for(int j = i + 1,mid = i; j < cnt; j++){
    19                     if(flag[j] == 1)
    20                         continue;
    21                     if(group[j].first >= group[mid].first && group[j].second >= group[mid].second){
    22                         flag[j] = 1;
    23                         mid = j;
    24                     }
    25                 }
    26                 num_group++;
    27             }
    28         }
    29     return num_group;
    30 }
    31 
    32 int main(void){
    33     int cnt;/// 零件个数
    34     while(scanf("%d",&cnt) != EOF){
    35         for(int i = 0; i < cnt; i++){
    36             scanf("%d%d",&group[i].first,&group[i].second);
    37         }
    38         sort(group,group + cnt);
    39         printf("%d
    ",greedy(cnt));
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    系列文章--突袭HTML5之Javascript
    arguments对象的实例使用
    Javascript常用的设计模式详解
    javascript日历插件
    系列文章--AJAX技术系列总结
    零基础汇编学习笔记
    VC++6.0注释快捷键的添加使用
    VC6++常用快捷键
    汇编题目:编写包含多个功能子程序的中断例程
    汇编题目:按A键,当松开的时显示字母A
  • 原文地址:https://www.cnblogs.com/yfs123456/p/5422689.html
Copyright © 2011-2022 走看看