零件分组(Stick)-动态规划-中高级

Case Time Limit:1000MS

Time Limit: 3000MS Memory Limit: 65536K

Total Submissions: 62 Accepted: 21

Description

某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(Wi)。现在为了加工需要,要将它们分成若干组,使每一组的零件都能排成一个长度和重量都不下降

Input

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

Output

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

Sample Input

5 8 4 3 8 2 3 9 7 3 5

Sample Output

2

思路:

刚开始看到这题的时候感觉和导弹拦截那道题的第二问很像。

但是这道题和导弹那道题的差距是,导弹那道题的导弹顺序是固定的,所以我们分组的时候也只能从前到后进行分组。

但是这里我们可以对他们的顺序进行改变后再进行分组。

所以首先我先对零件的长度进行从小到大的排序,因为我们要求的是一个LIS,这是第一个约束条件,然后我们就像导弹的第二问那样,进行分组。分组的时候要注意当有多种情况成立时,我们要选择那个w较大的那个,因为我们尽可能的要让w小的去匹配小的嘛。然后就能够求出需要几组了。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap; public class lingjianfenzu {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), b, c, d = 0;
int[] l = new int[n + 1];
boolean[] lb = new boolean[n + 1];
int[] len = new int[n + 1];
int[] w = new int[n + 1];
int[] we = new int[n + 1];
for (int i = 1; i < w.length; i++) {
l[i] = sc.nextInt();
len[i] = l[i];
w[i] = sc.nextInt();
// map.put(b, c);
}
// int a=1;
// for (int i :map.keySet()) {
// l[a]=i;
// w[a]=map.get(i);
// a++;
// }
Arrays.sort(len);
for (int i = 1; i < w.length; i++) {
we[i] = Integer.MAX_VALUE;
for (int j = 1; j < w.length; j++) {
if (len[i] == l[j] && !lb[j]) {
if (w[j] < we[i]) {
we[i] = w[j];
d = j;
}
}
}
lb[d] = true;
}
list.add(we[1]);
for (int i = 2; i < w.length; i++) {
int temp = 0;
for (int j = 0; j < list.size(); j++) {
if (list.get(j) <= we[i]) {
Collections.replaceAll(list, list.get(j), we[i]);
temp = 1;
break;
}
}
if (temp == 0) {
list.add(we[i]);
}
}
System.out.println(list.size());
} }

(Java实现) 零件分组的更多相关文章

  1. 零件分组_DP

    问题 C: 零件分组 时间限制: 1 Sec  内存限制: 64 MB提交: 31  解决: 14[提交][状态][讨论版] 题目描述 某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(W ...

  2. codevs 4888 零件分组

    4888 零件分组  时间限制: 1 s  空间限制: 16000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 现有一些棍状零件,每个零件都有 ...

  3. 拦截导弹类问题 (Codevs4888零件分组POJ1065Wooden Sticks)(LIS及其覆盖问题)

    拦截导弹 题意:求最长不上升子序列长度:求一个序列最少分成几个非增子序. 第一问易求,已知序列a,令f[i]为a前i个元素的最长非增子序的长度,则有 f[i]=max{f[i],f[j]+1} (1& ...

  4. JAVA 集合 List 分组的两种方法

    CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...

  5. 使用Java正则表达式的分组解析身份证的年月日

    根据Java的Pattern和Matcher类通过分组解析出身份证的年月日: public class GetDateInIdCard { public static void main(String ...

  6. Java多线程可以分组,还能这样玩!

    前面的文章,栈长和大家分享过多线程创建的3种方式<实现 Java 多线程的 3 种方式>. 但如果线程很多的情况下,你知道如何对它们进行分组吗? 和 Dubbo 的服务分组一样,Java ...

  7. java使用elasticsearch分组进行聚合查询(group by)-项目中实际应用

    java连接elasticsearch 进行聚合查询进行相应操作 一:对单个字段进行分组求和 1.表结构图片: 根据任务id分组,分别统计出每个任务id下有多少个文字标题 .SQL:select id ...

  8. P2093 零件分组【贪心算法练习题】

    题目链接: http://codevs.cn/problem/4888/ https://www.luogu.org/problem/show?pid=2093 题目描述 某工厂生产一批棍状零件,每个 ...

  9. Java实现运动员分组

    有N个人参加100米短跑比赛.跑道为8条.程序的任务是按照尽量使每组的人数相差最少的原则分组. 例如: N=8时,分成1组即可. N=9时,分成2组:一组5人,一组4人. N=25时,分4组:7.6. ...

随机推荐

  1. 【Spark】如何用Spark查询IP地址?

    文章目录 需求 思路 ip地址转换为Long类型的两种方法 ip地址转换数字地址的原理 第一种方法 第二种方法 步骤 一.在mysql创建数据库表 二.开发代码 需求 日常生活中,当我们打开地图时,会 ...

  2. Git使用教程之SSH连接方式配置(二)

    什么是GitHub?这个网站就是提供Git仓库托管服务的. 什么是SSH Key?你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,大白话理解就是这两个仓库如果要进行远程同步,则我们需 ...

  3. 使用IDEA远程向伪分布式搭建的Hadoop提交MapReduce作业

    环境 VirtualBox 6.1 IntelliJ IDEA 2020.1.1 Ubuntu-18.04.4-live-server-amd64 jdk-8u251-linux-x64 hadoop ...

  4. Web_php_include-攻防世界

    0x00 简介 记录这个题纯粹是为了记录以下有关strstr()函数的相关知识. 0x01 题目 <?php show_source(__FILE__); echo $_GET['hello'] ...

  5. 理解css属性的继承和覆盖

    首先,我们梳理一下哪些属性会被继承 文本 color 颜色,a元素除外 direction 方向 font 字体 font-family 字体系列 font-style 字体风格 font-size ...

  6. lodash入门

    简介 Lodash是一个著名的javascript原生库,不需要引入其他第三方依赖.是一个意在提高开发者效率,提高JS原生方法性能的JS库.简单的说就是,很多方法lodash已经帮你写好了,直接调用就 ...

  7. 轻量级熔断降级框架 alibaba sentinel 应用

    一.简介: wiki:https://github.com/alibaba/Sentinel/wiki 选择: ♥ 开源,成熟(功能完备.实际应用),活跃(功能维护及拓展) ♥ 更轻量:依赖资源少:a ...

  8. .gitignore 模式匹配

    匹配模式前使用 / 表示根目录 匹配模式后使用 / 代表是目录(不是文件) 匹配模式前加 ! 表示取反 * 代表任意个字符 ? 匹配任意一个字符 ** 匹配任意级目录

  9. 敏捷为什么会失败之「PA-SA-WAKA-DA」理论

    在日常生活中,有种有趣的现象:我们更津津乐道于美好的故事,比如提到好莱坞,我们关注的只是大牌明星,却忽略了他们成名其背后的艰辛.对于那些成功的敏捷项目,也是如此.在我们见证成功的同时,却忘记了项目团队 ...

  10. MySQL 选错索引的原因?

    MySQL 中,可以为某张表指定多个索引,但在语句具体执行时,选用哪个索引是由 MySQL 中执行器确定的.那么执行器选择索引的原则是什么,以及会不会出现选错索引的情况呢? 先看这样一个例子: 创建表 ...