博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
走两次格子之和最大
阅读量:5931 次
发布时间:2019-06-19

本文共 1270 字,大约阅读时间需要 4 分钟。

hot3.png

搜狗:

1,有n*n个正方形格子,每个格子里有正数或者0,从最左上角往最右下角走,只能向下和向右走。一共走两次,把所有经过的格子的数加起来,求最大值。且两次如果经过同一个格子,则该格子的数只加一次。

思路:

搜索:一共搜(2n-2)步,每一步有四种走法。考虑不相交等条件可以剪去很多枝。

复杂度为O(4^n)

动态规划:

by:

详细算法思路:http://www.51nod.com/question/index.html#!questionId=657

s[k][i][j] = max(s[k-1][i-1][j-1],s[k-1][i-1][j],s[k-1][i][j-1],s[k-1][j][i])+map[i][k-i]+map[j][k-j];

复杂度为O(n^3)

#include 
#define MAX(a,b) (a)>(b)?(a):(b)using namespace std;#define N 5int map[5][5]={ {2,0,8,0,2}, {0,0,0,0,0}, {0,3,2,0,0}, {0,10,0,0,0}, {2,0,8,0,2}};int sumMax=0;int p1x=0;int p1y=0;int p2x=0;int p2y=0;int curMax=0;/*编号系统为:0000011111222223333344444走1次:编号有:0,1走2次:编号有:0,1,2走5次:编号有:1,2,3,4走k次:编号有:l,l+1,l+2...,h-1 //low,high 的计算见code编号到map坐标的转换为:编号i,则对应map[i][k-i].dp方程为:s[k][i][j] = max(s[k-1][i-1][j-1],s[k-1][i-1][j],s[k-1][i][j-1],s[k-1][j][i])+map[i][k-i]+map[j][k-j];*/int dp(void){ int s[2*N-1][N][N]; s[0][0][0]=map[0][0]; for(int k=1;k<2*N-1;k++){ int h = k
=0) t= MAX(t, s[k-1][i-1][j-1]); if( j
=0&&j
sumMax) sumMax = curMax; return; } if( !(p1x==0 && p1y==0) && !(p2x==N-1 && p2y==N-1)) { if( p1x>= p2x && p1y >= p2y ) return; } //right right if( p1x+1
经验证dp结果是错的。。。但作者思路应该是对的

转载于:https://my.oschina.net/u/1247611/blog/163238

你可能感兴趣的文章
16.3.1-sp_getapplock
查看>>
oc-10-对象做参数
查看>>
常用HiveQL总结
查看>>
JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别
查看>>
delphi 编译生成ipa文件 adhoc步骤
查看>>
ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver
查看>>
从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
查看>>
Odoo Website 替换 Summernote 为第三方富文本编辑器
查看>>
【转】游戏程序员养成计划
查看>>
让git for windows记住密码
查看>>
Asp.Net时间戳与时间互转
查看>>
如何终止java线程
查看>>
从tcp原理角度理解Broken pipe和Connection reset by peer的区别
查看>>
sloth——算法工程师标注数据的福音
查看>>
恢复计算机崩溃数据的五款最佳Linux发行版
查看>>
【MySQL】MySQL快速插入大量数据
查看>>
weblogic重置用户名密码。
查看>>
C语言扩展Python模块
查看>>
父类不能转换成子类
查看>>
李洪强iOS开发之带placeHolder的Textview
查看>>