JZOJ8.14(C组)射命丸文

本文介绍了一种解决特定问题的算法,即如何利用相机消除弹幕并获得最大分数。该算法通过预处理二维数组来快速计算任意矩形区域内的总分值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:在幻想乡,射命丸文是以偷拍闻名的鸦天狗。当然,文文的照相机可不止能够照相,还能够消除取景框里面所有的弹幕。假设现在文文面前有一块N行M列的弹幕群,每一个单位面积内有分值有num[i][j]的弹幕。相机的取景框可以将一块R行C列的弹幕消除,并且得到这一块区域内所有弹幕的分值(累加)。现在文文想要取得尽可能多的分值,请你计算出她最多能够得到的分值。


分析:

用F来初始化,表示以(1,1)为顶点,(i,J)为右下角点构成的矩形之中的数的和,再枚举每一个点,用ans:=max(ans,f[i,j]-f[i-r,j]-f[i,j-c]+f[i-r,j-c]);来求R*C矩阵的值,最后输出ans。

附上程序:

const
  maxn=1000;

var
  n,m,r,c,ans:longint;
  f:array [-maxn..maxn,-maxn..maxn] of longint;

procedure init;
var
  i,j,num:longint;
begin
  readln(n,m,r,c);
  for i:=1 to n do
    for j:=1 to m do
      begin
        read(num);
        f[i,j]:=f[i-1,j]+f[i,j-1]-f[i-1,j-1]+num;
      end;
end;

function max(a,b:longint):longint;
begin
  if a>b then
    exit(a);
  exit(b);
end;

procedure main;
var
  i,j:longint;
begin
  for i:=1 to n do
    for j:=1 to m do
      ans:=max(ans,f[i,j]-f[i-r,j]-f[i,j-c]+f[i-r,j-c]);
  write(ans);
end;

begin
  init;
  main;
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值