Ex 6_5棋子放置问题_第八次作业

题目貌似有问题

(b)
子问题定义: 设maxValue[i][j]为棋盘的前i行中最后一行为i时第i行按照第j种放置方式放置时得到的最大覆盖值,comp[i][j]为第i种放置方式与第j种放置方式是否相容,value[i][j]为第i行按照第j种放置方式放置时覆盖整数的最大值,如此可以得到递归式。
递归关系:
初值设定:
maxValue的行数为棋盘的行数加一,因此令maxValue[0][j]=0表示没有棋盘时值为0
求解顺序:
按从上到下,从左到右的次序求解maxValue的每一行的值,最终返回maxValue的最后一行的最大值即为最终解。
package org.xiu68.ch6.ex8;
public class Ex6_5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] chessBoard1=new int[][]{
{1,2,3,4},
{2,1,2,1}
};
maxChessBoard(chessBoard1);
int[][] chessBoard2=new int[][]{
{0,1,0,1},
{1,0,1,0},
{1,2,1,2}
};
maxChessBoard(chessBoard2);
//运行结果
/*
被棋子覆盖的整数总和最大为: 10
被棋子覆盖的整数总和最大为: 8
*/
}
//chessBoard:棋盘
public static void maxChessBoard(int[][] chessBoard){
int TYPE=8; //每一行可以放置的棋的种类数
int rows=chessBoard.length; //棋盘的行
int cols=4; //棋盘的列
//comp[i][j]表示i、j两种放置模式是否相容,每行共8种放置方式
boolean[][] comp=new boolean[][]{
{true,true,true,true,true,true,true,true},
{true,false,true,true,true,false,true,false},
{true,true,false,true,true,true,false,true},
{true,true,true,false,true,false,true,true},
{true,true,true,true,false,true,false,false},
{true,false,true,false,true,false,true,false},
{true,true,false,true,false,true,false,false},
{true,false,true,true,false,false,false,false}
};
//每行8种放置方式,method[i][j]表示某一行在第i种放置方式下的第j列是否放棋
boolean[][] method=new boolean[][]{
{false,false,false,false},
{true,false,false,false},
{false,true,false,false},
{false,false,true,false},
{false,false,false,true},
{true,false,true,false},
{false,true,false,true},
{true,false,false,true}
};
//max[i][j]表示前i行中最后一行为i时第i行按照第j种放置方式的最大值
int[][] max=new int[rows+1][TYPE];
for(int i=0;i<TYPE;i++)
max[0][i]=0; //最小子问题,初始化为0
//value[i][t]表示第i行按照第t种方式放棋得到的值
int[][] value=new int[rows][TYPE];
//初始化value数组
for(int i=0;i<rows;i++){
for(int t=0;t<TYPE;t++){
for(int j=0;j<cols;j++){
if(method[t][j]){ //第t种放置方式下第j列是否放棋
value[i][t]+=chessBoard[i][j];
}
}
}
}
//求max数组
for(int i=1;i<max.length;i++){
for(int t=0;t<TYPE;t++){
max[i][t]=0;
for(int k=0;k<TYPE;k++){
if(!comp[t][k]) //t、k两种放置方式不相容
continue;
if(max[i-1][k]+value[i-1][t]>max[i][t])
max[i][t]=max[i-1][k]+value[i-1][t];
}
}
}
//求max数组的最后一行的最大值即为最终解
int maxValue=0;
for(int i=0;i<TYPE;i++){
if(max[max.length-1][i]>maxValue)
maxValue=max[max.length-1][i];
}
System.out.println("被棋子覆盖的整数总和最大为: "+maxValue);
}
}
Ex 6_5棋子放置问题_第八次作业的更多相关文章
- Ex 6_21 最小点覆盖问题_第八次作业
子问题定义: 对于图中的每个结点,有两种状态,即属于最小点覆盖和不属于最小点覆盖,定义minSet[i][0]表示结点i属于点覆盖,并且以i为根的树的最小点覆盖的大小.minSet[i][1]表示点i ...
- Ex 6_14 布料剪裁问题_第八次作业
子问题定义: 定义p[i][j]为布料宽为i,高为j的最优产出,每次剪下一块布料,剩余布料最多形成三块矩阵面料.每次剪裁会有两种情况,水平切割布料,其次是将布料旋转90度后在切割布料. 递归关系: 初 ...
- 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语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...
随机推荐
- [luogu2822][组合数问题]
题目链接 题解: 对于上面和下面的式子进行分解质因数,然后看看上面的质因数个数减去下面的质因数个数能不能达到k的质因数的要求即可. 分解质因数的时候用对于阶乘分解质因数的常用方法:比如要求1999!中 ...
- C++中的STL中map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...
- poj 3683(2-SAT+SCC)
传送门:Problem 3683 https://www.cnblogs.com/violet-acmer/p/9769406.html 参考资料: [1]:挑战程序设计竞赛 题意: 有n场婚礼,每场 ...
- context configure and clock schedule
每个窗口都有自己的context,这里演示怎么配置context以及如何实现定时器...... #-*- coding:gbk -*- import pyglet platform=pyglet.wi ...
- (转)Go中的string和[]byte对比
本文转自:https://sheepbao.github.io/post/golang_byte_slice_and_string/ 作者:boya 声明:本文目的仅仅作为个人mark,所以在翻译的过 ...
- Hadoop生态圈-Oozie实战之调度shell脚本
Hadoop生态圈-Oozie实战之调度shell脚本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客展示案例:使用Oozie调度Shell脚本. 1>.解压官方案例 ...
- Scala进阶之路-Spark独立模式(Standalone)集群部署
Scala进阶之路-Spark独立模式(Standalone)集群部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道Hadoop解决了大数据的存储和计算,存储使用HDFS ...
- CentOS Linux release 7.3源码安装zabbix
CentOS Linux release 7.3安装zabbix 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 我去年用用centos6的环境搭建了一下 zabbix3.0 ...
- maven的pom.xml文件标签含义
pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以 ...
- C和C++的区别和联系
关于C和C++的区别是面试中经常会被问到的问题,本着即将面试的心态,进行知识整理,并对小知识点进行扩展: C/C++的联系: C++是C的超集,兼容大部分C的语法的结构: 联系嘛我只能想到这个,毕竟c ...