栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2004 领地选择

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2004 领地选择

2004 领地选择

暴力枚举能得50分左右
愣是不明白是啥意思,其实就是给定一个n×m的大小格子,还有每一个格子的价值,在给定一个c×c的方框,使得方框框起来的价值最大
其实有点类似于二位前缀和了
其实就是得用前缀和来做
然后枚举出来每一个前缀和,保存最大的就好了
感觉没什么难的
好水啊,感觉和动态规划没啥关系

#include
#include
#include
#include
#include
using namespace std;
int length,wide,C,mapp[3002][3002];
int Max=-999999999,maxx,maxy;//记录最大价值和坐标 
int f[3002][3002];//二位前缀和 
int main()
{
	cin>>length>>wide>>C; 
	for(int i=1;i<=length;i++)
	   for(int j=1;j<=wide;j++)
	   {
	       cin>>mapp[i][j]; 
	       f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+mapp[i][j];//维护二位前缀和 
	   }
	for(int i=1;i<=length-C+1;i++)
	   for(int j=1;j<=wide-C+1;j++)//因为待会要加上c,所以在这减去 
	   {
	   	  int sum=f[i+C-1][j+C-1]+f[i-1][j-1]-f[i-1][j+C-1]-f[i+C-1][j-1];
	   	  if(sum>Max)Max=sum,maxx=i,maxy=j;//枚举最大的价值 
	   }
	cout<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311843.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号