欢乐赛C

HDU1559
原题链接https://vjudge.net/contest/350953#problem/C
在这里插入图片描述
在m,n的矩阵中找一个最大的x,y矩阵
本题需要用二维前缀和来写,一维前缀和用于计算a-b之间的数
二位前缀和则是用于计算(a,b)-(x,y)之间的数,
首先对于二维前缀和的计算方法
1 2 3
4 5 6
7 8 9
对于这个二维数组而言 1就是1 ,
2 是1 和2 的和;
3为1 2 3 的和
4 为1 4 的和;
5为1 2 4 5的和;
6 为1 2 3 4 5 6的和
7为1 4 7 的和
8为1 2 4 5 7 8;
9为 1 2 3 4 5 6 7 8 9
当然计算前缀和时也会有一点问题,我们是从左向右一排一排遍历,这样就无法计算类似1 2 4 5这样的数,通过图形可以发现一些公式,1 2 4 5是1 2加上1 4 再减去1(1 2和1 4 一共加了两次1所以要减去一个)再加上5当前的数。
通过这个我们可以发现 a[i][j]就是(0,0)和(i,j)组成的矩形的全部数的和
对于二维前缀和需要有一点变化,
假如我们需要计算5 6 8 9这个2*2的值,我们现在已知的是1 2 3 4 5 6 7 8 9的和以及1 2 3 和1 4 7 6,对于图形观察5-9我们可以通过1-9减去1-3再减去1-7来计算但是同时我们会发现1这个位置的数减去了两次所以我们还要加上多减去的一个1;
公式就出来了:a[9]-a[3]-a[7]+a[1];

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<queue>
using namespace std;
long long map[1005][1005];
long long sum[1005][1005];
int main()
{
	long long t;
	scanf("%lld",&t);
	while(t--)
	{
		long long m,n,x,y;
		scanf("%lld %lld %lld %lld",&n,&m,&x,&y);
		memset(sum,0,sizeof(sum));
		memset(map,0,sizeof(map));
		long long i,j,maxx1=-1;;
		for(i=1; i<=n; i++)
		{
			for(j=1; j<=m; j++)
			{
				scanf("%lld",&map[i][j]);
				if(map[i][j]>=maxx1)//对于需要选取1*1的方格的情况要特殊判断,1*1也就是找输入的数的最大值,所以我们记录一下
				{
					maxx1=map[i][j];
				}
				sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+map[i][j];
			}
		}
		if(x==1&&y==1)//对于1*1进行特判
		{
			printf("%lld\n",maxx1);
			continue;
		}
		
		//	for(i=1; i<=n; i++)
		//	{
		//		for(j=1; j<=m; j++)
		//		{
		//			printf("%lld ",sum[i][j]);
		//		}
		//		printf("\n");
		//	}
		long long maxx=-1;
		for(i=1; i<=n-x+1; i++)//遍历寻找最大值,x-1是确定所取的方块的位置和大小
		{
			for(j=1; j<=m-y+1; j++)//y-1同上
			{
				long long sum1=sum[i+x-1][j+y-1]-sum[i+x-1][j-1]-sum[i-1][j+y-1]+sum[i-1][j-1];
				if(sum1>maxx)
				{
					maxx=sum1;
				}
			}
		}
		printf("%lld\n",maxx);
	}
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
欢乐斗地主的python开发主要涉及到两个方面,一是实现游戏的自动出牌器,二是利用图像识别技术来辅助获取游戏信息。 首先,你需要准备一个欢乐斗地主的游戏界面,可以使用pyautogui库来模拟鼠标点击和键盘输入的操作。通过编写相应的代码,你可以打开欢乐斗地主游戏界面并进入游戏。一旦玩家就位,手牌分发完毕,地主身份确认之后,你可以点击游戏界面中的开始按钮,让AI来帮助你斗地主。 其次,你可以利用开源项目DouZero来制作一个基于DouZero的欢乐斗地主出牌器。DouZero是一个有趣的开源AI斗地主项目,由快手团队开发。你可以学习并使用DouZero的相关代码***为了辅助获取游戏信息,你可以使用图像识别技术来识别欢乐斗地主游戏界面上的地主图标,从而确认地主角色。你可以借助PyAutoGUI库中的locateOnScreen()函数和适当的图像识别模板,来查找游戏界面中的地主标志位置。具体的代码实现可以参考上述引用中的示例代码。 综上所述,你可以通过编写相应的代码来实现一个基于DouZero的欢乐斗地主出牌器,利用图像识别技术来辅助获取游戏信息,从而实现自动化的斗地主游戏体验。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [斗地主老是输?一起用Python做个AI出牌器,欢乐豆蹭蹭涨](https://blog.csdn.net/xx16755498979/article/details/129156899)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值