【Luogu3444】ORK-Ploughing(贪心)

题面

Luogu

题解

我们知道,如果我们选定了以横向为主,或者纵向为主,

那么就有尽可能减少另一个方向上耕地的次数

所以分开贪心,但是本质相同,所以接下来只考虑纵向为主

既然确定了以纵向为主,那么就要尽可能减少横向操作的次数

所以,只要能够纵向耕地,就不考虑横向耕地

可是,如果到了某个时候,纵向无法耕了

此时必须横向耕

但是我们不知道应该从上面开始还是下面开始

为了解决这个问题

我们假设上面最多耕的次数是有限次

换种想法,我们假设上面至少耕这么多次

既然上面的次数确定,那么下方的耕地次数越少越好

所以耕地的优先级:

左-右-上-下

只要能够耕就一定耕

这样,枚举-贪心的做法就可以做啦

横向、纵向分别算一遍

时间复杂度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(贪心)的更多相关文章

  1. [POI2006]ORK-Ploughing(贪心,枚举)

    [POI2006]ORK-Ploughing 题目描述 Byteasar, the farmer, wants to plough his rectangular field. He can begi ...

  2. 洛谷P3444 [POI2006]ORK-Ploughing [枚举,贪心]

    题目传送门 ork 格式难调,题面就不放了. 分析: 一道偏难的贪心和枚举题.考试的时候是弃疗了...yyb巨佬已经讲的很详细了,推荐他的博客.这里小蒟蒻就只放代码了. Code: #include& ...

  3. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  4. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  7. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  8. 【BZOJ-4245】OR-XOR 按位贪心

    4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 486  Solved: 266[Submit][Sta ...

  9. code vs 1098 均分纸牌(贪心)

    1098 均分纸牌 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解   题目描述 Description 有 N 堆纸牌 ...

随机推荐

  1. 浅谈JavaScript的事件(事件模拟)

    事件经常由操作或者通过浏览器功能触发,通过JavaScript也可以触发元素的事件.通过JavaScript触发事件,也称为事件的模拟. DOM中事件模拟 可以document的createEvent ...

  2. python中的变量,运算符

    范例: name = 'Crossin' myVar = 123 price = 5.99 visible = True “=”的作用是把右边的值赋予给左边的变量. python中有四种较为常见的数据 ...

  3. 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 ...

  4. 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 ...

  5. windows转mac-开发环境搭建(二):mac上java环境搭建

    1.首先下载jdk,地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.安 ...

  6. SpringBoot application.yml logback.xml,多环境配置,支持 java -jar --spring.profiles.active

    趁今天有时间整理了一下 启动命令为 //开发环境 java -jar app.jar --spring.profiles.active=dev--server.port=8060 //测试环境 jav ...

  7. Http协议规范及格式

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型.客户 ...

  8. linux 版本控制及rpm打包

    版本控制 subversion:是一个自由/开源的版本控制系统,在subversion管理下,文件和目录可以超越时空subversion允许你数据恢复到早期版本,或者是检查数据修改历史许多人将版本控制 ...

  9. 给VMware的虚拟机设置静态地址

    最近在VMware 上运行新版本Linux 虚拟机集群,在给每个虚拟机设置静态IP时,遇到一些挫折,新版本有些变动,故记录下来备用. Centos版本信息7.4.1708: Ubuntu版本信息17. ...

  10. (转)Hanoi塔问题分析

    转自:http://shmilyaw-hotmail-com.iteye.com/blog/2077098 简介 关于Hanoi塔问题的分析,在网上的文章都写烂了.之所以打算写这篇文章,更多的是针对这 ...