• 洛谷P2280 [HNOI2003]激光炸弹


    P2280 [HNOI2003]激光炸弹

    题目描述

    输入输出格式

    输入格式:

    输入文件名为input.txt

    输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi 。

    输出格式:

    输出文件名为output.txt

    输出文件仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标(结果不会超过32767)。

    输入输出样例

    输入样例#1:
    2 1
    0 0 1
    1 1 1
    
    输出样例#1:
    1
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int sum[6010][6010],dp[6010][6010],ans,map[6010][6010],cnt[6010];
    int n,r,max_x,max_y;
    int main(){
        //freopen("Cola.txt","r",stdin);
        scanf("%d%d",&n,&r);
        int x,y,z;
        for(int i=1;i<=n;i++){
            scanf("%d%d%d",&x,&y,&z);
            max_x=max(max_x,x);
            max_y=max(max_y,y);
            map[x][y]=z;
        }
        for(int i=0;i<=max_y;i++)
            for(int j=0;j<=r-1;j++)
                sum[0][i]+=map[j][i];
        for(int i=0;i<=max_y;i++){
            for(int j=1;j<=max_x;j++){
                sum[j][i]=sum[j-1][i]-map[j-1][i]+map[j+r-1][i];
            }
        }
        for(int i=0;i<=r-1;i++)
            dp[0][0]+=sum[0][i];
        ans=max(ans,dp[0][0]);
        for(int i=0;i<=r-1;i++){
            for(int j=0;j<=r-1;j++){
                cnt[i]+=map[i][j];
            }
        }
        for(int i=1;i<=max_x;i++){
            for(int j=0;j<=r-1;j++)
                cnt[i+r-1]+=map[i+r-1][j];
            dp[i][0]=dp[i-1][0]-cnt[i-1]+cnt[i+r-1];
            ans=max(ans,dp[i][0]);
        }
        
        for(int i=1;i<=max_y;i++)
            for(int j=0;j<=max_x;j++){
                dp[j][i]=dp[j][i-1]-sum[j][i-1]+sum[j][i+r-1];
                ans=max(ans,dp[i][j]);
            }
        printf("%d",ans);
    }
    
    30分 前缀和
    30分 前缀和(写的丑的后果TLE+WA)
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int n,r,dp[5101][5101];
    void read(int &n)
    {
        char c='+';int x=0;bool flag=0;
        while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
        while(c>='0'&&c<='9')
        {x=x*10+c-48;c=getchar();}
        flag==1?n=-x:n=x;
    }
    int ans=0;
    int main()
    {
        read(n);read(r);
        for(int i=1;i<=n;i++)
        {
            int x,y,z;
            read(x);read(y);read(z);
            dp[x+1][y+1]=z;
        }
        for(int i=1;i<=5001;i++)
            for(int j=1;j<=5001;j++)
                dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+dp[i][j];
        for(int i=0;i<=5001-r;i++)
            for(int j=0;j<=5001-r;j++)
                ans=max(ans,dp[i+r][j+r]-dp[i+r][j]-dp[i][j+r]+dp[i][j]);
        printf("%d",ans);
        return 0;
    }
    100分 标准的前缀和
  • 相关阅读:
    mac 外接显示屏的坑
    ssh 多秘钥管理和坑
    CircleCI 前端自动部署
    jest 事件测试
    await Vue.nextTick() 的含义分析
    Jest 里面需要注意的几个小细节
    element 库 date-picker 的 disabledDate 的坑
    jest 提示 Unexpected identifier 的解决方案
    preventDefault 和 stopPropagation
    数据库:Flask-SQLAlchemy
  • 原文地址:https://www.cnblogs.com/thmyl/p/7358495.html
Copyright © 2020-2023  润新知