題目鏈接:P2280 [HNOI2003] 激光炸彈 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)
筆者答案:
#include<stdio.h>
int s[5005][5005];
int main ()
{int n,m;scanf("%d %d",&n,&m);int i,j;int x,y,v;int max;for(i = 1;i <= n;i ++)//完成價值坐標標記 找出目標范圍{scanf("%d %d %d",&x,&y,&v);s[x+1][y+1] += v;}for(i = 1;i <= 5001;i ++)//求二維前綴和數組{for(j = 1;j <= 5001;j ++){s[j][i]+=s[j-1][i]+s[j][i-1]-s[j-1][i-1];}}for(i = 1;i +m-1<= 5001;i ++)//找出最大價值和{for(j = 1;j +m-1 <= 5001;j ++){if(i==1&&j==1)//max初始化{max=s[j+m-1][i+m-1]-s[j-1][i+m-1]-s[j+m-1][i-1]+s[j-1][i-1];}if(s[j+m-1][i+m-1]-s[j-1][i+m-1]-s[j+m-1][i-1]+s[j-1][i-1] > max){max=s[j+m-1][i+m-1]-s[j-1][i+m-1]-s[j+m-1][i-1]+s[j-1][i-1];}}}printf("%d",max);return 0;
}