P2213 [USACO14MAR]懒惰的牛The Lazy Cow_Sliver
P2213 [USACO14MAR]懒惰的牛The Lazy Cow_Sliver
最大化一个子矩阵的和。
我们如何去做,dp和贪心呀!
大体题意:给定一个正方形,然后在正方形中求出一个大小已经给定的倾斜45的子正方形。使得这个正方形内的元素和最大。
倾斜45度?
好像可以做,有点麻烦?
可以观察到,如果我们将一个已经计算好了的菱形进行平推一格,那么变动的元素只\(2\ast k-1\)(k为边长)。然后每次维护就可以了。
时间复杂度\(O(n^2k)\)
感觉是对的。可我就是不愿意写。那怎么办?
考虑将整个图形旋转45度。
这是样例:


这样子矩形就正过来了。然后就可以很容易的跑前缀和暴力了。时间复杂度\(O((2n)^2)\)。不对,好像更慢了。
空间范围小mua,瞎搞就过了呀。在能通过的范围上最大化收益mua~~
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
using std::max;
using std::min;
const int maxn=540;
int base[maxn][maxn];
int New[maxn<<1][maxn<<1];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&base[i][j]);
for(int K=2;K<=2*n;K++)
for(int j=1;j<=n;j++)
if(K-j>0&&K-j<=n)
{
int i=K-j;
int A=K-1;
int B=(n-A)+2*(j-1)+1;//规律
New[A][B]=base[i][j];
}
n=n*2;k=k*2+1;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
New[i][j]=New[i][j]+New[i-1][j]+New[i][j-1]-New[i-1][j-1];
int ans=0;
k=min(n,k);
for(int i=k;i<=n;i++)
for(int j=k;j<=n;j++)
ans=max(ans,New[i][j]-New[i-k][j]-New[i][j-k]+New[i-k][j-k]);
printf("%d",ans);
}
P2213 [USACO14MAR]懒惰的牛The Lazy Cow_Sliver的更多相关文章
- 洛谷 2213 [USACO14MAR]懒惰的牛The Lazy Cow_Sliver
[题解] 每个格子可以到达的区域是一个菱形,但是我们并不能快速的求和,所以我们可以把原来的草地旋转45度,用二维前缀和快速处理菱形的区域的和. #include<cstdio> #incl ...
- 037——VUE中表单控件处理之表单修饰符:lazy/number/trim
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- Hibernnate延迟加载策略(这么详细你还看不懂)
好久没有认真写过博客了,今天就好好的写一篇吧!!!!!!!!! 当Hibernate 从数据库中加载某个对象(例如:Dept对象)时,如果同时自动加载所有的关联的某个对象(例如:Emp对象),而程序实 ...
- iOS - Swift 面向对象语法
1.面向对象 面向过程:面向过程编成将所要解决的问题按解决问题的步骤进行分析.如果是大问题,就分解成为多个不同的小问题,在程序里叫做划分成不同的模块.每一个解决的步骤可能是一行或者几行代码,也可能是一 ...
- Yii 多表关联relations,需要与with()方法联合使用
1,首先多表关联是在models/xx.php的relations里配置的.而且是互配,但有区别. 格式: 'VarName'=>array('RelationType', 'ClassName ...
- C++11新特性之字节对齐、多参数模版、placement new
1. 内存对齐 #pragma pack(push, 1) struct A { char a; int b; double c; ]; }; #pragma pack(pop) #pragma pa ...
- java——线段树 SegmentTree
应用: 区间染色 区间查询 线段树不是完全二叉树,线段树是平衡二叉树 使用数组来实现线段树:存储空间为4n 以下是使用数组实现的静态线段树: public class SegmentTree<E ...
- 漫步Facebook开源C++库Folly之string类设计(散列、字符串、向量、内存分配、位处理等,小部分是对现有标准库和Boost库功能上的补充,大部分都是基于性能的需求而“重新制造轮子”)
就在近日,Facebook宣布开源了内部使用的C++底层库,总称folly,包括散列.字符串.向量.内存分配.位处理等,以满足大规模高性能的需求. 这里是folly的github地址:https:// ...
随机推荐
- Maven运行时找不到xml文件和properties文件的问题解决
使用Maven构建的项目,包下面的xml文件和properties属性文件默认在运行tomcat插件是不会生成文件到target里面的,需要自己配置 一.第一种解决方法也是最常用的解决方法 在pom. ...
- Redis 常见命令
0. 5种数据类型 String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合) 1. String 字符串 set key value 设置key=v ...
- PHP DES解密 对应Java SHA1PRNG方式加密
背景及问题 背景:在和外部系统通过HTTP方式跳转时, 为保障传输参数安全性, 采用AES 加密参数. 关于对称加密中 AES, DES, CBC, ECB, PKCS5Padding 概念可参考ht ...
- 定时器实现方式之TimerTask、Timer
在未来某个指定的时间点或者经过一段时间延迟后执行某个事件,这时候就需要用到定时器了.定时器的实现方式有很多种,今天总结最简单的实现方式.java 1.3引入了定时器框架,用于在定时器上下文中控制线程的 ...
- 201610-H5项目总结
1.首屏进入动效使用jQuery的animate(); $('.btn_driver').animate({ left:'26%' },'slow'); $('.btn_show').animate( ...
- canvas image array(canvas图片阵列)
code: <!DOCTYPE html> <html> <head> <title>hehe</title> </head& ...
- 原生js、jQuery实现选项卡功能
在大家在网上平常浏览网页的时候,想必各位都会看到选项卡功能,在这里给大家详解一下用原生js.jQuery如何来写一些基本的选项卡 话不多说,先给各位看一下功能图: 好了,下边 ...
- Oracle中创建Job实现自动插入值操作
在PL/SQL Developer中创建Job --临时测试表 create table test_job ( id ), c_date date ); --临时序列 create sequence ...
- C#链接数据库:SQL Server 2008
自己学习C#编程,在WinForm编程中,代码测试连接数据库. 现在sqlserver中测试使用的数据库能否以指定的用户名和密码登录. 如图所示,计算机名为administrator,数据库实例为sq ...
- Python学习---线程锁/信号量/条件变量同步/线程池1221
线程锁 问题现象: 多线程情况下,CPU遇到阻塞会进行线程的切换,所以导致执行了tmp-=1的值还未赋值给num=tmp,另一个线程2又开始了tmp -=1,所以导致最后的值重复赋值给了num,所以出 ...