【Luogu3444】ORK-Ploughing(贪心)
【Luogu3444】ORK-Ploughing(贪心)
题面
题解
我们知道,如果我们选定了以横向为主,或者纵向为主,
那么就有尽可能减少另一个方向上耕地的次数
所以分开贪心,但是本质相同,所以接下来只考虑纵向为主
既然确定了以纵向为主,那么就要尽可能减少横向操作的次数
所以,只要能够纵向耕地,就不考虑横向耕地
可是,如果到了某个时候,纵向无法耕了
此时必须横向耕
但是我们不知道应该从上面开始还是下面开始
为了解决这个问题
我们假设上面最多耕的次数是有限次
换种想法,我们假设上面至少耕这么多次
既然上面的次数确定,那么下方的耕地次数越少越好
所以耕地的优先级:
左-右-上-下
只要能够耕就一定耕
这样,枚举-贪心的做法就可以做啦
横向、纵向分别算一遍
时间复杂度O((n+m)^2)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 2222
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int K,m,n,ans=1e9;
int g[MAX][MAX];
int sl[MAX][MAX],sr[MAX][MAX];
int Work1(int up)
{
int l1=1,l2=n,r1=1,r2=m,ret=0,ss;
while(l1<=l2&&r1<=r2)
{
++ret;
ss=sr[l2][r1]-sr[l1-1][r1];
if(ss<=K){++r1;continue;}
ss=sr[l2][r2]-sr[l1-1][r2];
if(ss<=K){--r2;continue;}
ss=sl[l1][r2]-sl[l1][r1-1];
if(ss<=K&&l1<up){++l1;continue;}
ss=sl[l2][r2]-sl[l2][r1-1];
if(ss<=K){--l2;continue;}
ret=1e9;break;
}
return ret;
}
int Work2(int left)
{
int l1=1,l2=n,r1=1,r2=m,ret=0,ss;
while(l1<=l2&&r1<=r2)
{
++ret;
ss=sl[l1][r2]-sl[l1][r1-1];
if(ss<=K){++l1;continue;}
ss=sl[l2][r2]-sl[l2][r1-1];
if(ss<=K){--l2;continue;}
ss=sr[l2][r1]-sr[l1-1][r1];
if(ss<=K&&r1<left){++r1;continue;}
ss=sr[l2][r2]-sr[l1-1][r2];
if(ss<=K){--r2;continue;}
ret=1e9;break;
}
return ret;
}
int main()
{
freopen("ork.in","r",stdin);
freopen("ork.out","w",stdout);
K=read();m=read();n=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
g[i][j]=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
sl[i][j]=sl[i][j-1]+g[i][j];
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
sr[i][j]=sr[i-1][j]+g[i][j];
for(int i=1;i<=n;++i)
ans=min(ans,Work1(i));
for(int i=1;i<=m;++i)
ans=min(ans,Work2(i));
printf("%d\n",ans);
return 0;
}
【Luogu3444】ORK-Ploughing(贪心)的更多相关文章
- [POI2006]ORK-Ploughing(贪心,枚举)
[POI2006]ORK-Ploughing 题目描述 Byteasar, the farmer, wants to plough his rectangular field. He can begi ...
- 洛谷P3444 [POI2006]ORK-Ploughing [枚举,贪心]
题目传送门 ork 格式难调,题面就不放了. 分析: 一道偏难的贪心和枚举题.考试的时候是弃疗了...yyb巨佬已经讲的很详细了,推荐他的博客.这里小蒟蒻就只放代码了. Code: #include& ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【BZOJ-4245】OR-XOR 按位贪心
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 486 Solved: 266[Submit][Sta ...
- code vs 1098 均分纸牌(贪心)
1098 均分纸牌 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有 N 堆纸牌 ...
随机推荐
- 浅谈JavaScript的事件(事件模拟)
事件经常由操作或者通过浏览器功能触发,通过JavaScript也可以触发元素的事件.通过JavaScript触发事件,也称为事件的模拟. DOM中事件模拟 可以document的createEvent ...
- python中的变量,运算符
范例: name = 'Crossin' myVar = 123 price = 5.99 visible = True “=”的作用是把右边的值赋予给左边的变量. python中有四种较为常见的数据 ...
- LeetCode - 657. Judge Route Circle
Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot m ...
- configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.
Apache在2.4版本以后,编译时: # ./configure \ --prefix=/usr/local/apache2 \ --with-included-apr \ --enable-so ...
- windows转mac-开发环境搭建(二):mac上java环境搭建
1.首先下载jdk,地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.安 ...
- SpringBoot application.yml logback.xml,多环境配置,支持 java -jar --spring.profiles.active
趁今天有时间整理了一下 启动命令为 //开发环境 java -jar app.jar --spring.profiles.active=dev--server.port=8060 //测试环境 jav ...
- Http协议规范及格式
HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型.客户 ...
- linux 版本控制及rpm打包
版本控制 subversion:是一个自由/开源的版本控制系统,在subversion管理下,文件和目录可以超越时空subversion允许你数据恢复到早期版本,或者是检查数据修改历史许多人将版本控制 ...
- 给VMware的虚拟机设置静态地址
最近在VMware 上运行新版本Linux 虚拟机集群,在给每个虚拟机设置静态IP时,遇到一些挫折,新版本有些变动,故记录下来备用. Centos版本信息7.4.1708: Ubuntu版本信息17. ...
- (转)Hanoi塔问题分析
转自:http://shmilyaw-hotmail-com.iteye.com/blog/2077098 简介 关于Hanoi塔问题的分析,在网上的文章都写烂了.之所以打算写这篇文章,更多的是针对这 ...