Ex 6_14 布料剪裁问题_第八次作业
子问题定义: 定义p[i][j]为布料宽为i,高为j的最优产出,每次剪下一块布料,剩余布料最多形成三块矩阵面料。每次剪裁会有两种情况,水平切割布料,其次是将布料旋转90度后在切割布料。
递归关系:
初值设定:
p[0][h]=0
p[w][0]=0
求解顺序:
依次求解二维数组p的每一行,每一列,最终的结果为p[布料的宽][布料的高]
package org.xiu68.ch6.ex8; public class Ex6_14 { //布料剪裁问题
public static void main(String[] args) {
// TODO Auto-generated method stub
Clothing[] cloths=new Clothing[]{
new Clothing(10,10,10),
new Clothing(20,20,10),
new Clothing(30,30,30),
new Clothing(40,40,160)
};
tailor(10,10,cloths); //生产出的产品最高价为: 10
tailor(40,40,cloths); //生产出的产品最高价为: 160 Clothing[] cloths2=new Clothing[]{
new Clothing(10,10,10),
new Clothing(10,10,11),
new Clothing(20,20,10),
new Clothing(30,30,30),
new Clothing(40,40,180)
};
tailor(10,10,cloths2); //生产出的产品最高价为: 11
tailor(40,40,cloths2); //生产出的产品最高价为: 180
} /*
* w:布料的宽
* h:布料的高
* cloths:服装产品
* 一块布切割后,最多剩下3块
*/
public static void tailor(int w,int h,Clothing[] cloths){
if(w<=0 || h<=0)
return;
int[][] p=new int[w+1][h+1]; //p[i][j]表示布料宽为i,高为j所得到的最大价格 //求布料的宽为i,高为j所得到的最大价格
for(int i=1;i<=w;i++){
for(int j=1;j<=h;j++){
p[i][j]=0;
for(int k=0;k<cloths.length;k++){ int kWidth=cloths[k].width, //第k件服装的需要布料的宽
kHeight=cloths[k].height, //第k件服装的需要布料的高
kPrice=cloths[k].price, //第k件服装的价格
horizontalCut=0, //水平切割布料所得到的最大价格
verticalCut=0; //旋转布料90度后再切割布料所得到的最大价格 if(i>=cloths[k].width && j>=cloths[k].height) //水平切割
horizontalCut=kPrice+p[kWidth][j-kHeight]+p[i-kWidth][kHeight]+p[i-kWidth][j-kHeight]; if(i>=cloths[k].height && j>cloths[k].width) //旋转布料90度后再切割
verticalCut=kPrice+p[kHeight][j-kWidth]+p[i-kHeight][kWidth]+p[i-kHeight][j-kWidth]; if(horizontalCut>verticalCut){
if(horizontalCut>p[i][j])
p[i][j]=horizontalCut;
}else{
if(verticalCut>p[i][j])
p[i][j]=verticalCut;
} }//for3
}//for2
}//for1
System.out.println("生产出的产品最高价为: "+p[w][h]);
}
} //服装
class Clothing{
public int width; //宽
public int height; //高
public int price; //价格 public Clothing(int width, int height, int price) {
super();
this.width = width;
this.height = height;
this.price = price;
}
}
Ex 6_14 布料剪裁问题_第八次作业的更多相关文章
- Ex 6_21 最小点覆盖问题_第八次作业
子问题定义: 对于图中的每个结点,有两种状态,即属于最小点覆盖和不属于最小点覆盖,定义minSet[i][0]表示结点i属于点覆盖,并且以i为根的树的最小点覆盖的大小.minSet[i][1]表示点i ...
- Ex 6_5棋子放置问题_第八次作业
题目貌似有问题 (b) 子问题定义: 设maxValue[i][j]为棋盘的前i行中最后一行为i时第i行按照第j种放置方式放置时得到的最大覆盖值,comp[i][j]为第i种放置方式与第j种放置方式是 ...
- JAVA第八次作业
JAVA第八次作业 (一)学习总结 1.用思维导图对本周的学习内容进行总结 参考资料: XMind. 2.通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery ...
- oo第八次作业
oo第八次作业 第五次作业分析: 1.度量图: 2.类图: 第五次作业由于是第一次接触多线程,所以导致自己的经验不足,因此最终也没有完成作业,到最后任然不能实现三部电梯的有效调度,所以导致了这次作业的 ...
- 2017-2018-2 1723《程序设计与数据结构》第八周作业 & 实验二 & 第一周结对编程 总结
作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第八周作业
2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-o ...
- 2017-2018-1 JAVA实验站 第八周作业
2017-2018-1 JAVA实验站 第八周作业 详情请见团队博客
- 2017-2018-1 JaWorld 第八周作业
2017-2018-1 JaWorld 第八周作业 团队分工 成员 分工 陈是奇 统计成员工具选择 马平川 类图 王译潇 编码规范 李昱兴 用例图 林臻 状态图 张师瑜 推进工作进展.写博客 UML ...
- 2017-2018-1 20179205《Linux内核原理与设计》第八周作业
<Linux内核原理与设计>第八周作业 视频学习及操作分析 预处理.编译.链接和目标文件的格式 可执行程序是怎么来的? 以C语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...
随机推荐
- poj 1759(二分)
传送门:Problem 1759 https://www.cnblogs.com/violet-acmer/p/9793209.html 题意: 有N个彩灯关在同一条绳上,给出第一个彩灯的高度A,并给 ...
- Struts2的安装
安装Struts 2 ,并开发一个简单 Model 1.下载Struts 2 在Struts 2 官网下载:http://struts.apache.org ,下载 struts-2.3.16.3-a ...
- 上传znbsite
1.将本地文件打包为zip: 2.备份服务器上的classes文件夹下面的配置文件: 3.上传zip,释放到tomcat下: 4.覆盖classes文件夹中的配置文件,启动tomcat:
- Prometheus+grafana搭建
一.简介 1.1 Prometheus Prometheus是一套开源的监控系统,它将所有信息都存储为时间序列数据:因此实现一种Profiling监控方式,实时分析系统运行的状态.执行时间.调用次数等 ...
- InfluxDB、grafana、collect部署监控(centos6.8)
collect部署 1.安装 yum install collectd -y 2.配置/etc/collectd.conf LoadPlugin network <Plugin network& ...
- JAVA 远程通讯机制
在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB. Burlap.Hessian.SOAP.EJB和JMS等,这 ...
- 运用Zabbix实现内网服务器状态及局域网状况监控(1) —— Zabbix介绍
一.Zabbix简介 Zabbix 是一个企业级的.开源的.分布式的监控套件 Zabbix 可以监控网络和服务的监控状况. Zabbix 利用灵活的告警机制,允许用户对事件发送基于 Email 的告警 ...
- 转--python 基础
核心库 1.NumPy 当我们用python来处理科学计算任务时,不可避免的要用到来自SciPy Stack的帮助.SciPy Stack是一个专为python中科学计算而设计的软件包,注意不要将它 ...
- 改变placeholder的字体颜色大小
input::-webkit-input-placeholder { /* WebKit browsers */ font-size:14px; color: #333; } input::-moz- ...
- 矩阵NumPy
常量: np.pi π 创建矩阵数组 import numpy as np # array=np.array([[1,2,3],[5,6,7]]) #定义一个2行3列的矩阵数组.2行=2维 # pri ...