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语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...
随机推荐
- centos7配置本地yum源 使用安装镜像安装软件
1. 在cdrom挂载安装镜像.(物理机则插入光盘,虚拟机则在CD/DVD中选择iso镜像.如果虚拟机mount时提示找不到则在选择iso镜像上方勾选“已连接”和“启动时连接”,或者点击 虚拟机下方状 ...
- kafka安装以及入门
一.安装 下载最新版kafka,Apache Kafka,然后上传到Linux,我这里有三台机器,192.168.127.129,130,131 . 进入上传目录,解压到/usr/local目录下 - ...
- C#网络编程之编码解码
这里是代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- Hbase记录-HBase扫描/计数/权限
HBase扫描 scan 命令用于查看HTable数据.使用 scan 命令可以得到表中的数据.它的语法如下: scan ‘<table name>’ 下面的示例演示了如何使用scan ...
- jquery :checked(过滤选择器) 和 空格:checked(后代选择器)【转】
jquery 过滤选择器 和 后代选择器 <%@ page language="java" contentType="text/html; charset=UTF- ...
- Gitlab部署
前言 因部门业务整顿,需将原有的多部门共用的Gitlab环境遗弃,新建部门独立的Gitlab环境! 安装 CE版本安装操作:https://about.gitlab.com/install/#cent ...
- Grooming Meeting及测试人员所扮演的角色
Grooming Meeting的中文翻译是“梳理会议”,它并不是Scrum框架中标准的会议(标准会议为Planning Meeting, Daily Scrum Meeting, Review Me ...
- AsciiMorph - 新奇的 ASCII 字符画生成工具&插件
AsciiMorph 是一个新奇的 ASCII 字符画生成工具和开源插件.字符画(ASCII Art)的历史可以追溯到几十年前,起初是用在图形显示功能受限的设备上,用ASCII字符集里的可打印字符来拼 ...
- Json Schema简介
1. 引言 什么是Json Schema? 以一个例子来说明 假设有一个web api,接受一个json请求,返回某个用户在某个城市关系最近的若干个好友.一个请求的例子如下: { "city ...
- Git Gui基本使用情况
本教程将讲述:gitk的Git Gui的部分常用功能和使用方法,包括:建库.克隆(clone).上传(push).下载(pull - fetch).合并(pull - merge). ———————— ...