中易网

如何实现三维动态规划?

答案:2  悬赏:0  
解决时间 2021-02-03 06:42
可在一维数组中找出最大和子段
可在二维数组中找出最大和子矩阵
那么如何在三维数组中找出最大和子立方体
最佳答案
1.一维找出最大子和段方法如下
int thissum=0,maxsum=0;
for (int q=0;q {
thissum+=a[q];
thissum=max(thissum,0);
maxsum=max(thissum,maxsum);
}
最后maxsum就是答案了 复杂度为o(n) (看不懂这段的再追问吧)
2.二维其实是基于一维的查找方法,通过枚举列、然后对行进行动态规划,当然要加上前缀和的优化(即s[i][j]=a[0][j]+....+a[i][j]) 复杂度o(n^2*m);
for (int q=1;q<=n;q++)
for (int p=q;p<=n;p++)
{
thissum=0;
for (int i=0;i {
thissum+=s[p][i]-s[q-1][i];
thissum=max(thissum,0);
maxsum=max(thissum,maxsum);
}
}
3.三维的思路依旧,枚举长高、对宽进行动态规划,加上前缀和优化,复杂度o(h^2*m^2*n)
for (q=1;q<=h;q++)
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{
scanf("%d",&k);
s[q][i][j]=s[q][i-1][j]+k;
}

for (q=1;q<=h;q++)
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
s[q][i][j]+=s[q-1][i][j];

for (q=1;q<=h;q++)
for (p=q;p<=h;p++)
for (i=1;i<=m;i++)
for (j=i;j<=m;j++)
{
thissum=0;
for (k=1;k<=n;k++)
{
thissum+=s[p][j][k]-s[q-1][j][k]-s[p][i-1][k]+s[q-1][i-1][k];
if (thissum>maxsum) maxsum=thissum;
if (thissum<0) thissum=0;
}
}

另外,oj上有道题目似乎就是求这个的 好像是叫吃西瓜来着 你可以搜一下...
全部回答
3dmark
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
欢迎医学同行讨论“假如没了抗生素人类会怎么
大三实习生在实习期间签订了劳动合同现在离职
农村信用社红场信用社我想知道这个在什么地方
防火分区的防火墙中防火门可以用推拉门吗?
天火大有 静卦 男 婚姻感情 无意间说出自己的
金牛座b型血适合律师职业吗
公主岭市大岭镇孟学坊村村民委员会这个地址在
已知等差数列{an}的公差d>0,首项a1>0,Sn=
携程的酒店加盟里的佣金率怎么填?我家是开农
7天连锁酒店北京前门店怎么去啊,有知道地址
电脑加密文件被杀毒软件删除后
海尔专卖店社头店地址在什么地方,想过去办事
你如何理解“但少闲人如吾两人耳”一句的含义
谦的读音是什么
有往届毕业生告诉我一下济南有哪里可以存放个
推荐资讯
中国福利彩票 双色球中了一等奖给我了支票 可
我觉得自己没有生命,没感情;没有记忆。没有
听说龙眼加枸杞煮后当茶喝,可以治眼睛,但喝
赶海小院怎么去啊,有知道地址的么
上海邮政速递物流东川经营部 我寄的邮件已到
我想装个DIY电脑,要1000块钱左右的,玩游戏
黄焖鸡米饭地址有知道的么?有点事想过去
哪里有奇迹SF单机版下载
善和养生堂芜湖旗舰店地址有知道的么?有点事
为什么男人肚子痛小便会出血
正方形的边长扩大10倍,它的周长扩大多少倍
同桌一百学习网怎么样(具体点)
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?