zoj 1716

 一开始觉得虽然题目很长,但是解题思路是挺清晰的。就是用数组将树的位置设为1.然后用几个循环做数组求和求最大值。可是提交时却一直WA。想了很久才发现代码同时存在几个问题。第一问题是用数组保存树的位置时下表保留错了。坐标(x,y)其实对应的是的数组不是 a(x-1)(y-1),而应该是 a(y-1)(x-1)。第二个问题最外面的循环忘记了每次都要将数组清空。清空数组可以用#include <string.h>里面的memset(a,0,sizeof(a)); 


最后是AC的代码。

#include<iostream>
#include <string.h>
using namespace std;

int sum_trees(int a[105][105],int i,int j,int s,int t)
{
    int sum=0;
    for(int p=i;p<i+t;p++)
      for(int q=j;q<j+s;q++)
      {
              sum=sum+a[p][q];
      }
    return sum;
}

int main()
{
   int a[105][105],n,x,y,w,h,s,t,p,q,max,sum;
   
   while(cin>>n&&n!=0)
   {
       memset(a,0,sizeof(a)); 
       max=0;
       cin>>w>>h;
       for(int k=0;k<n;k++)
       {
               cin>>x>>y;
               a[y-1][x-1]=1;
       }
       cin>>s>>t;
       for(int i=0;i<=h-t;i++)
       {
         for(int j=0;j<=w-s;j++)
         {
              sum=sum_trees(a,i,j,s,t);
              if(max<sum)
              {
                   max=sum;
              }
         }
       }
   cout<<max<<endl;    
   }
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值