题目貌似有问题

(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. (转)在Eclipse中创建Maven多模块工程

    背景:以前只总结了怎么在命令行下创建maven的多模块项目,在eclipse下怎么创建不是很清楚.最近需要在git的资源库中上传多模块项目,方便后期的维护,所以将网上的资料进行整理. 原文链接:htt ...

  2. UML类关系(依赖,关联,聚合,组合,泛化,实现)

    转自https://blog.csdn.net/k346k346/article/details/59582926   在学习面向对象设计时,类关系涉及依赖.关联.聚合.组合和泛化这五种关系,耦合度依 ...

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

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

  4. MYCAT分库分表

    一.整体架构 1.192.168.189.130:mysql master服务,两个数据库db_store.db_user,db_store做了主从复制 db_user: 用户表users为分片表 数 ...

  5. JS 将字符串数组用 | 或其他符号分割

    var arr = ["吕超","赵云","典韦","关羽","马超","张飞" ...

  6. CentOS下设置vim的tab键为4格

    # vim /etc/vimrc 在最后一行添加 set softtabstop=4 或者set tabstop=4 或者在~/.vimrc中添加也可以 没有~/.vimrc文件可以创建一个 另: s ...

  7. Grooming Meeting及测试人员所扮演的角色

    Grooming Meeting的中文翻译是“梳理会议”,它并不是Scrum框架中标准的会议(标准会议为Planning Meeting, Daily Scrum Meeting, Review Me ...

  8. Spring中的Bean配置

    IOC&DI概述 OPC(Inversion of Control):其思想是反转资源获取的方向.传统的资源查找方式要求组件向容器发起请求查找资源.作为回应,容器适时的返回资源.而应用了IOC ...

  9. 51nod1331 狭窄的通道

    题目传送门 这道题 51nod只Ac了十二个人 没有题解可以研究 所以就自己YY了半天 在这里先感谢一波岚清大爷 orz 然后这道题我分了两种情况 一种是左边的往左跑右边的往右跑 中间有一部分直接走不 ...

  10. 20155332 2006-2007-2 《Java程序设计》第4周学习总结

    20155332 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 理解封装.继承.多态的关系 理解抽象类与接口的区别 掌握S.O.L.I.D原则 了解模式和设 ...