零件分组_DP

问题 C: 零件分组

时间限制: 1 Sec  内存限制: 64 MB
提交: 31  解决: 14
[提交][状态][讨论版]

题目描述

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

输入

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

输出

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

样例输入

5
8 4 3 8 2 3 9 7 3 5

样例输出

2
解题思路:动态规划求最大递减子序列(最少分组数=最大反链数_dilworth定理)
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

struct node{
    int l;
    int w;
};
node a[1005];

int cmp(node a,node b){
    return a.l<b.l||a.l==b.l&&a.w<b.w;
}

int main()
{
    int n;
    int sum[1005];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d %d",&a[i].l,&a[i].w);
        sum[i]=0;
    }
    sort(a,a+n,cmp);
    int ans=0;
    for(int i=0;i<n;i++){
        int maxx=0;

        for(int j=0;j<i;j++){
            if(a[j].w>a[i].w){
                maxx=max(maxx,sum[j]);
            }
        }
        sum[i]=maxx+1;
        ans=max(ans,sum[i]);
    }
    printf("%d",ans);
    return 0;
}
时间: 2024-11-10 11:39:30

零件分组_DP的相关文章

codevs 4888 零件分组

4888 零件分组 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 现有一些棍状零件,每个零件都有一定的长度(Li)和重量(Wi).现在为了加工需要,要将他们分成若干组,使每一组中的零件都能排成一个长度和重量都不下降(若i<j,则Li<=Lj,Wi<=Wj,其中i,j为在同一组中的序号)的序列.请问至少要分成几组? 输入描述 Input Description 第1行为一个整数n,表示棍状零件的总个数.

【题解】零件分组

题目描述 某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和质量(Wi).现在为了加工需要,要将它们分成若干组,使每一组的零件都能排成一个长度和质量都不下降(若i<j,则Li≤Lj,Wi≤Wj)的序列.请问至少要分成几组? 输入格式 第一行为一个整数N(N≤1000),表示零件的个数: 第二行有N对正整数,每对正整数表示这些零件的长度和质量,长度和重量均不超过10000. 输出格式 仅一行,即最少分成的组数. 输入样例 5 8 4 3 8 2 3 9 7 3 5 输出样例 2 题解 我们按

零件分组

数组开小点! 数组开小点! 数组开小点! 不然会MLE.想去打出题人,不知道地址.有的大佬用DP,蒟蒻只会用sort排一遍,然后去看是否满足要求.... 方程: dp[i]=max(dp[j]+1,dp[i]). 代码: #include<bits/stdc++.h> using namespace std; struct str { int l,r; }a[11000]; int n; int dp[11000]={0},ans; bool cmp(str x,str y) { if(x.l

k-means和iosdata聚类算法在生活案例中的运用

引言:聚类是将数据分成类或者簇的过程,从而使同簇的对象之间具有很高的相似度,而不同的簇的对象相似度则存在差异.聚类技术是一种迭代重定位技术,在我们的生活中也得到了广泛的运用,比如:零件分组.数据评价.数据分析等很多方面:具体的比如对市场分析人员而言,聚类可以帮助市场分析人员从消费者数据库中分出不同的消费群体来,并且可以分析出每一类消费者的消费习惯等,从而帮助市场人员对销售做出更好的决策. 所以,本篇博客主要是对生活中的案例,运用k-means算法和isodata聚类算法进行数据评价和分析.本文是

C#开发微信门户及应用(5)--用户分组信息管理

在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继续写这个系列的博客了,并不是对这个方面停止了研究,而是继续深入探索这方面的技术,为了更好的应用起来,专心做好底层的技术开发.本篇继续上一篇的介绍,主要介绍分组管理方面的开发应用,这篇的内容和上一篇,作为一个完整的用户信息和分组信息管理的组合. 1.用户分组管理内容 用户分组的引入,主要是方便管理关注者列表,以及方便向不同的组别发送消息的操作的,一个公众账号,最多支持创建500个分组. 用户分组

使用多级分组报表展现分类数据

当你走进便利店,你会发现所有的商品都是按类排放的,分类排放可以帮助您快速找到同类商品,也可以快速发现你想要的商品. 当去饭店吃饭的时候,菜单上的菜也是按类别排列的,比如凉菜,热菜,汤类,主食等.点菜时你会直接翻到你想要的那一类菜单,点菜. -- 通过上面场景,大家就理解分组呈现数据的好处了,分组可以帮助快速定位,方便数据查找,汇总,分析数据趋势等.有时候分析某一单一的商品并无价值,所以采用分组是最常见也是最简单的数据分析手段. 分组报表则是在报表中使用分组功能,是工作中最常用的报表类型,分组功能

分组转发算法

1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址N(子网掩码和IP地址做与运算可得出网络地址). 2)若N就是于此路由器直接相连的某个网络地址,则进行直接交付,不需要在经过其他路由器,直接把数据报交付给目的主机(这里包括把目的IP地址D转换为具体的MAC地址(ARP协议),把数据报封装成MAC帧,在发送此帧):否则就是间接交付. 3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器. 4)若路由表中有达到网络N的路由,则把数据报传送给路由表中所指明

11 css中分组选择符的用法

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style type="text/css"> h1,span{color:red;} a:hover{color:#2EE926;} /*分组选择符的用法*/ </style> </head> <body&

SQL group 分组查询

1.使用group by进行分组查询  在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:  被分组的列 为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数group by的使用在这只写几个例子吧:例: select courseID,avg(score) as 课程平均成绩 from score group by courseID 例: select studentID as 学员编号,courseID as 内部测试,a