zoukankan      html  css  js  c++  java
  • D.轰炸区最优选取

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    现在给出一个正方形地图,其边长为n,地图上有的地方是空的,有的地方会有敌人。
    我们现在有一次轰炸敌人的机会,轰炸敌人的区域是一个k*k的正方形区域,现在需要你解决的问题就是计算最多轰炸的敌人数量是多少。 

    输入描述:

    本题包含多组数据,每组数据第一行输入两个数n,k。
    接下来n行,每行n个数字,表示这个点上的敌人数量。
    数据范围:
    1<=n<=50
    1<=k<=n
    每个点上的敌人数量不超过100个(0<=a[i][j]<=100)。

    输出描述:

    每组数据输出包含一行,表示计算的结果。
    示例1

    输入

    4 2
    1 1 0 0
    1 1 0 0
    0 0 2 2
    0 0 2 2

    输出

    8

    说明

    样例中,显然轰炸右下角那个部分能够击败最多的敌人

    分析:预处理每行,然后快速求和。

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 int map[100][100];
     5 int main()
     6 {
     7     int N,k;
     8     while(scanf("%d%d",&N,&k)!=EOF)
     9     {
    10         for(int i=1;i<=N;i++)
    11         for(int j=1;j<=N;j++)
    12         {
    13             scanf("%d",&map[i][j]);
    14             map[i][j]+=map[i][j-1];//map[i][j]表示第i行第1个数到第j个数的和
    15         }
    16         int ans=0;
    17         for(int i=1;i<=N;i++) 
    18         {
    19             for(int j=1;j<=N;j++)
    20             {
    21                 int num=k,temp=0;
    22                 for(int p=i;p<=N&&num;p++)
    23                 {
    24                     num--;
    25                     if(j+k>N) temp+=map[p][N]-map[p][j-1];
    26                     else 
    27                     temp+=map[p][j+k-1]-map[p][j-1];
    28                 }
    29                 ans=ans>temp?ans:temp;
    30             }
    31         }
    32         printf("%d
    ",ans);
    33     }
    34     return 0;
    35 }
    View Code
    
    
    
     
    
    
  • 相关阅读:
    php过滤表单提交的html等危险代码
    浅析php过滤html字符串,防止SQL注入的方法
    PHP简单判断手机设备的方法
    如何用Math.max.apply()获取数组最大/小值
    Ubuntu14.04升级到Ubuntu16.04
    4、python数据类型之列表(list)
    3、python数据类型之字符串(str)
    centos7网卡名称修改以及配置
    rsync简单总结
    8、kvm虚拟机添加硬盘
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8068224.html
Copyright © 2011-2022 走看看