(Java实现) 零件分组
零件分组(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实现) 零件分组的更多相关文章
- 零件分组_DP
问题 C: 零件分组 时间限制: 1 Sec 内存限制: 64 MB提交: 31 解决: 14[提交][状态][讨论版] 题目描述 某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(W ...
- codevs 4888 零件分组
4888 零件分组 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 现有一些棍状零件,每个零件都有 ...
- 拦截导弹类问题 (Codevs4888零件分组POJ1065Wooden Sticks)(LIS及其覆盖问题)
拦截导弹 题意:求最长不上升子序列长度:求一个序列最少分成几个非增子序. 第一问易求,已知序列a,令f[i]为a前i个元素的最长非增子序的长度,则有 f[i]=max{f[i],f[j]+1} (1& ...
- JAVA 集合 List 分组的两种方法
CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...
- 使用Java正则表达式的分组解析身份证的年月日
根据Java的Pattern和Matcher类通过分组解析出身份证的年月日: public class GetDateInIdCard { public static void main(String ...
- Java多线程可以分组,还能这样玩!
前面的文章,栈长和大家分享过多线程创建的3种方式<实现 Java 多线程的 3 种方式>. 但如果线程很多的情况下,你知道如何对它们进行分组吗? 和 Dubbo 的服务分组一样,Java ...
- java使用elasticsearch分组进行聚合查询(group by)-项目中实际应用
java连接elasticsearch 进行聚合查询进行相应操作 一:对单个字段进行分组求和 1.表结构图片: 根据任务id分组,分别统计出每个任务id下有多少个文字标题 .SQL:select id ...
- P2093 零件分组【贪心算法练习题】
题目链接: http://codevs.cn/problem/4888/ https://www.luogu.org/problem/show?pid=2093 题目描述 某工厂生产一批棍状零件,每个 ...
- Java实现运动员分组
有N个人参加100米短跑比赛.跑道为8条.程序的任务是按照尽量使每组的人数相差最少的原则分组. 例如: N=8时,分成1组即可. N=9时,分成2组:一组5人,一组4人. N=25时,分4组:7.6. ...
随机推荐
- 【MySQL基础总结】常用函数库
常用函数库 数学函数 分类及含义 示例 字符串函数 分类及含义 示例 日期时间函数 分类及含义 示例 条件判断函数 分类及含义 示例 系统函数 分类及含义 加密函数 分类及定义 其他常用函数 分类及含 ...
- LeetCode 62,从动态规划想到更好的解法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第36篇文章,我们一起来看下LeetCode的62题,Unique Paths. 题意 其实这是一道老掉牙的题目了 ...
- redis 集群安装
redis集群安装 1.下载redis源码 2.解压并进入解压后的文件夹redis内 3.make,生成一系列的文件(mkreleasehdr.sh, redis-benchmark, redis-c ...
- c#实现生成PDF的底层方法
在用uwp生成pdf的时候,发展此类类库有限,有的也需要钱,我最后实现pdf的底层方法生成pdf,代码如下 private async void GeneratePdf() { var file = ...
- 微信小程序开发实战(1):使用滚动视图
本文主要介绍了滚动视图组件(scroll-view)的各种常用功能,例如,垂直和水平滚动.滚动事件等,并通过例子代码来演示这些功能的使用方法. 1. 垂直滚动视图 scroll-view是容器组件 ...
- 洛谷P1027题解
https://www.luogu.org/problem/P1027传送到题目 首先,让我骂一句那没事找事的Car还取一个那么奇怪的名字看到这个题,恕我直言,我们明显可以看出这是一道图的最短路问题. ...
- 黑马vue学习的总结,vue笔记
cls:清除终端输出 $refs $http $route 使用this.$emit('show')来调用父方法
- 解决yum 问题
Dependencies Resolved Traceback (most recent call last): File "/usr/bin/yum", line 29, in ...
- 判断对象oStringObject是否为String
1.操作符 (1)typeof操作符 格式:result=typeof variable 返回值: undefined 值未定义 boolean 布尔值 string 字符串 number 数值 ob ...
- 09-Python之路---函数进阶
Python之路---函数进阶️ 程序员三大美德: 懒惰 因为一直致力于减少工作的总工作量. 缺乏耐性 因为一旦让你去做本该计算机完成的事,你将会怒不可遏. 傲慢 因为被荣誉感冲晕头的你会把程序写得让 ...