【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. 使用tcp+select实现客户端与客户端的通信

    使用多路复用实现客户端与客户端进行通信: 原理:客户端只要一连上服务器,立马给服务器发送用户名,然后在服务端将newsocketfd存放在同一个结构体中,客户端先给服务器发送数据,然后通过服务器转发给 ...

  2. IDEA的优质使用博客资源

    intelliJ idea 使用技巧&方法 IntelliJ IDEA 常用设置讲解 IntelliJ IDEA 详细图解最常用的配置 ,适合刚刚用的新人. IntelliJ IDEA 常见文 ...

  3. LINUX下的U盘挂载

    linux下如果没有图形界面的情况下就要我们自己熟悉命令来挂载U盘,下面给大家详细描述下U盘的挂载过程. 1. 插入U盘 2. #sudo fdisk –l 查看所挂载盘符名称如下图,假设盘符名称为s ...

  4. 让linux 服务器网卡物理口不停闪烁

    [root@DBSERVER51 ~]# ethtool -p eth0 此时就会看到对应的物理口一个灯在不停的闪烁,对了.这就是我们在系统看到的那个叫eth0的网卡了.就是这么简单.

  5. 在web工程中设置首页的页面

    有些时候删除了系统自带的index.jsp删除后会出现如下图错误 解决办法,新创建一个以你自己命名的jsp文件,然后在对该web工程的WEB-INF 目录下的web.xml进行添加加上下面的注释所带的 ...

  6. windows上nginx的安装和配置

    http://www.cnblogs.com/Li-Cheng/p/4399149.html http://www.cnblogs.com/huayangmeng/archive/2011/06/15 ...

  7. ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)

    前面文章介绍了ASP.NET MVC中的模型绑定和验证功能,本着ASP.NET MVC没有魔法的精神,本章内容将从代码的角度对ASP.NET MVC如何完成模型的绑定和验证进行分析,已了解其原理. 本 ...

  8. 在Vue2.0中集成UEditor 富文本编辑器

    在vue的'项目中遇到了需要使用富文本编辑器的需求,在github上看了很多vue封装的editor插件,很多对图片上传和视频上传的支持并不是很好,最终还是决定使用UEditor. 这类的文章网上有很 ...

  9. shiro整合ehcache

    目标:让Shiro整合ehcache,提供缓存realm数据的功能. 1.引入encache配置文件,配置缓存 <!-- <ehcache xmlns:xsi="http://w ...

  10. 用感知机(Perceptron)实现逻辑AND功能的Python3代码

    之所以写这篇随笔,是因为参考文章(见文尾)中的的代码是Python2的,放到Python3上无法运行,我花了些时间debug,并记录了调试经过. 参考文章中的代码主要有两处不兼容Python3,一个是 ...