题目貌似有问题

(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棋子放置问题_第八次作业的更多相关文章

  1. Ex 6_21 最小点覆盖问题_第八次作业

    子问题定义: 对于图中的每个结点,有两种状态,即属于最小点覆盖和不属于最小点覆盖,定义minSet[i][0]表示结点i属于点覆盖,并且以i为根的树的最小点覆盖的大小.minSet[i][1]表示点i ...

  2. Ex 6_14 布料剪裁问题_第八次作业

    子问题定义: 定义p[i][j]为布料宽为i,高为j的最优产出,每次剪下一块布料,剩余布料最多形成三块矩阵面料.每次剪裁会有两种情况,水平切割布料,其次是将布料旋转90度后在切割布料. 递归关系: 初 ...

  3. JAVA第八次作业

    JAVA第八次作业 (一)学习总结 1.用思维导图对本周的学习内容进行总结 参考资料: XMind. 2.通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery ...

  4. oo第八次作业

    oo第八次作业 第五次作业分析: 1.度量图: 2.类图: 第五次作业由于是第一次接触多线程,所以导致自己的经验不足,因此最终也没有完成作业,到最后任然不能实现三部电梯的有效调度,所以导致了这次作业的 ...

  5. 2017-2018-2 1723《程序设计与数据结构》第八周作业 & 实验二 & 第一周结对编程 总结

    作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...

  6. 2018-2019-1 20189221 《Linux内核原理与分析》第八周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-o ...

  7. 2017-2018-1 JAVA实验站 第八周作业

    2017-2018-1 JAVA实验站 第八周作业 详情请见团队博客

  8. 2017-2018-1 JaWorld 第八周作业

    2017-2018-1 JaWorld 第八周作业 团队分工 成员 分工 陈是奇 统计成员工具选择 马平川 类图 王译潇 编码规范 李昱兴 用例图 林臻 状态图 张师瑜 推进工作进展.写博客 UML ...

  9. 2017-2018-1 20179205《Linux内核原理与设计》第八周作业

    <Linux内核原理与设计>第八周作业 视频学习及操作分析 预处理.编译.链接和目标文件的格式 可执行程序是怎么来的? 以C语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...

随机推荐

  1. A1024. Palindromic Number

    A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...

  2. Codeforces Round #523 (Div. 2) C. Multiplicity

    C. Multiplicity 题目链接:https://codeforc.es/contest/1061/problem/C 题意: 给出一串数,问它的“好序列“有多少.好序列的定义是,首先是一个子 ...

  3. curl模拟http发送get或post接口测试

    一.get请求 curl "http://www.baidu.com"  如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 curl -i "http:// ...

  4. 9、JPA-映射-双向多对多

    实体类 Category package com.jpa.yingshe; import java.util.HashSet; import java.util.Set; import javax.p ...

  5. 淘宝开源编辑器Kissy Editor和简易留言编辑器【转】

    原来也写过一篇关于百度Ueditor编辑器的介绍:百度Ueditor编辑器的使用,ASP.NET也可上传图片 最开始是使用CuteEditor控件,需要好几mb的空间,因为刚开始学习ASP.NET的时 ...

  6. MyBatis联合查询和使用association 进行分步式查询

    查询Emp的同时,查出emp对应的部门Department 方法1:联合查询,使用级联属性封装结果集 <!-- 联合查询,使用级联属性封装结果集 type:要自定义规则的javaBean类型 i ...

  7. 20155330 2016-2017-2 《Java程序设计》第六周学习总结

    20155330 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解 ...

  8. Linux之Ubuntu下如何查看已安装的软件/库文件【摘抄】

    本文属于实用性质,且属于摘抄别处,出自:[Ubuntu 下如何查看已安装的软件](http://blog.csdn.net/m1205979825/article/details/40855583) ...

  9. JavaScript之Array/数组小结

    MDN-Array的属性/方法:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Arr ...

  10. HTML5中<template>标签的详细介绍

    HTML5中<template>标签的详细介绍(图文) 这篇文章主要介绍了HTML5中的template标签,是HTML5入门中的重要知识,需要的朋友可以参考 一.HTML5 templa ...