码迷,mamicode.com
首页 > 其他好文 > 详细

hihocoder1800

时间:2018-08-15 21:35:21      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:continue   amp   online   its   c++   tin   lin   pre   hihocoder   

 1 /*
 2   Source   :hihocoder1800
 3   Problem  :在n*m的方格中,每个格子有一个权值,求一个矩形区域面积大于等于S,总和最大
 4   Solution :枚举固定的两列,然后可以求得符合条件的长度L,求一个长度大于等于L的最大和。最大和=当前总和-最小的前缀和,当前总和的位置与最小前缀和的位置满足条件。
 5   Date     :2018-08-15-20.19
 6 */
 7 
 8 #include <bits/stdc++.h>
 9 using namespace std;
10 
11 typedef long long LL;
12 const int MAXN = 100005;
13 const LL MOD7 = 1e9+7;
14 
15 int n,m,S;
16 
17 int a[305][305];
18 int sum[305][305];
19 
20 void work()
21 {
22     int ans=-10000*90000;
23     for (int i=1;i<=m;++i)
24     {
25         for (int j=i;j<=m;++j)
26         {
27             if (n*(j-i+1)<S) continue;
28             int sum0=0;
29             int sum1=0;
30             int L = S/(j-i+1) + !!(S%(j-i+1));
31             int ms=10000*90000+5;
32             for (int k=1;k<=n;++k)
33             {
34                 if (k>=L)
35                 {
36                     sum1 += sum[k-L][j]-sum[k-L][i-1];
37                     ms = min(ms, sum1);
38                 }
39                 sum0+=sum[k][j]-sum[k][i-1];
40                 if (ms!=10000*90000+5)
41                 {
42                     ans=max(ans, sum0-ms);
43                 }
44             }
45         }
46     }
47     printf("%d\n",ans);
48 }
49 
50 int main()
51 {
52 #ifndef ONLINE_JUDGE
53     freopen("test.txt","r",stdin);
54 #endif // ONLINE_JUDGE
55     scanf("%d%d%d",&n,&m,&S);
56     for (int i=1;i<=n;++i)
57     {
58         for (int j=1;j<=m;++j)
59         {
60             scanf("%d",&a[i][j]);
61             sum[i][j] = sum[i][j-1] + a[i][j];
62         }
63     }
64     work();
65     return 0;
66 }

 

hihocoder1800

标签:continue   amp   online   its   c++   tin   lin   pre   hihocoder   

原文地址:https://www.cnblogs.com/LeeSongt/p/9484031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!