• bzoj1218: [HNOI2003]激光炸弹(DP二维前缀和)


    1218: [HNOI2003]激光炸弹

    题目:传送门


    题解:

       一道经典题目啊...

       为了更好的操作...把整个坐标系向右上角移动,从(1,1)开始

       那么f[i][j]统计一下以(i,j)作为右上角,以(1,1)作为左下角所组成的矩阵里面的价值和

       不难发现,爆炸范围为R*R,且刚好在边上的点不会被摧毁,那么有效矩阵的四条边上肯定就只有R个点

       那么ans=max(ans,f[i][j]+f[i-r][j-r]-f[i][j-r]-f[i-r][j]);


    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 int f[5100][5100];
     8 int main()
     9 {
    10     memset(f,0,sizeof(f));
    11     int n,r,x,y,v;scanf("%d%d",&n,&r);
    12     for(int i=1;i<=n;i++)scanf("%d%d%d",&x,&y,&v),f[x+1][y+1]+=v;
    13     for(int i=1;i<=5001;i++)
    14         for(int j=1;j<=5001;j++)f[i][j]+=f[i-1][j];
    15     for(int i=1;i<=5001;i++)
    16         for(int j=1;j<=5001;j++)f[i][j]+=f[i][j-1];
    17     int ans=0;
    18     for(int i=r;i<=5001;i++)for(int j=r;j<=5001;j++)
    19         ans=max(ans,f[i][j]+f[i-r][j-r]-f[i][j-r]-f[i-r][j]);
    20     printf("%d
    ",ans);
    21     return 0;
    22 }
  • 相关阅读:
    csp-s测试41 T2 影子
    模拟测试15 T3:rps (概率期望, 神*DP)
    考试沙币错误
    测试40
    水管局长 Lct
    测试32:chemistry
    测试35:抽卡
    模拟30,树
    考试策略&&模拟30经验总结:
    模拟测试28
  • 原文地址:https://www.cnblogs.com/CHerish_OI/p/8537374.html
Copyright © 2020-2023  润新知