博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2029--Get Many Persimmon Trees +DP
阅读量:6914 次
发布时间:2019-06-27

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

题意: 在一个w*h宽的矩形中有些位置有树有些位置没有,然后我们须要从中选一个s*t的矩形,使得里面含有的树最多.

思路: 我们将有树位置的值看成1,其他为0,然后成了选一个区域值最大.然后考虑这个问题的一维形式,在一维的情况下,我们非常easy得到一个方案:先处理前缀和,然后就能够枚举区间端点的起点,O(1)时间计算区间和,然后取当中的最大值为答案.
这道题我们能够按相同的思路来做,先求出(1,1)到(i,j)的区间和,然后枚举起点,O(1)的时间计算区间和,取当中最大值为答案.
当然这道题由于数据量较小,全然能够暴力,还能够用二维的树状数组来做.

代码例如以下:

#include
#include
#include
#include
using namespace std;#define maxn 105int Map[maxn][maxn],dp[maxn][maxn];int main(){ // freopen("in.txt","r",stdin); int w,h,s,t,n; while(scanf("%d",&n)&&n) { scanf("%d%d",&w,&h); memset(dp,0,sizeof(dp)); memset(Map,0,sizeof(Map)); for(int i=0;i
w||jj>h) continue; ans=max(ans,dp[ii][jj]-dp[ii][j-1]-dp[i-1][jj]+dp[i-1][j-1]); } printf("%d\n",ans); } return 0;}

转载地址:http://ubacl.baihongyu.com/

你可能感兴趣的文章
静态路由,默认路由
查看>>
libvirt之virt-install
查看>>
好程序员web前端分享Nodejs学习笔记之Stream模块
查看>>
如何看待云、云计算、云服务、云存储、云平台之间的区别和联系?
查看>>
我的友情链接
查看>>
Item Type名字取得不好
查看>>
我的友情链接
查看>>
solr聚类
查看>>
Oracle 维护 online redo log
查看>>
多年不断折腾下来,管理类软件的固定的开发思想形成讲解
查看>>
解决IE7主页自动跳转的方法之页面跳转现象
查看>>
如何像Uber一样给工程师派单 解放外包落后的生产力
查看>>
thinkphp5项目放在线上的LNMP环境中打开为空白问题解决
查看>>
Java Spring 中你不知道的注入方式
查看>>
Javascript弹出对话框组件
查看>>
C2审核模式(c2 audit mode)
查看>>
通过Eclipse安装Aptana Studio 3
查看>>
我的友情链接
查看>>
Packet Tracer 5.0建构CCNA实验攻略(17)——终结篇
查看>>
V-3-3 在没有vCenter的情况下,复制虚拟机
查看>>