[题目链接]

https://loj.ac/problem/2595

[算法]

显然 , 每个第一行的成市控制的一定是一段区间

那么 , 问题就转化为了经典的区间覆盖问题 , 贪心即可 , 时间复杂度 : O(N^3)

[代码]

#include<bits/stdc++.h>
using namespace std;
#define MAXN 510
const int dx[] = {,,-,};
const int dy[] = {-,,,}; int n,m,len;
int a[MAXN][MAXN];
pair<int,int> range[MAXN];
bool mark[MAXN];
bool visited[MAXN][MAXN]; template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
inline bool valid(int x,int y)
{
return x >= && x <= n && y >= && y <= m;
}
inline pair<int,int> bfs(int x,int y)
{
int l = , r = ;
queue< pair<int,int> > q;
memset(visited,false,sizeof(visited));
q.push(make_pair(x,y));
visited[x][y] = true;
while (!q.empty())
{
pair<int,int> cur = q.front();
q.pop();
for (int i = ; i < ; i++)
{
int x = cur.first + dx[i] , y = cur.second + dy[i];
if (valid(x,y) && a[x][y] < a[cur.first][cur.second] && !visited[x][y])
{
visited[x][y] = true;
q.push(make_pair(x,y));
}
}
}
for (int i = ; i <= m; i++)
{
if (visited[n][i])
{
mark[i] = true;
if (!l) l = r = i;
else r++;
}
}
return make_pair(l,r);
}
inline bool cmp(pair<int,int> a,pair<int,int> b)
{
if (a.first != b.first) return a.first < b.first;
else return a.second > b.second;
} int main()
{ read(n); read(m);
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
{
read(a[i][j]);
}
}
for (int i = ; i <= m; i++)
{
pair<int,int> tmp = bfs(,i);
if (tmp.first) range[++len] = tmp;
}
int cnt = ;
for (int i = ; i <= m; i++)
{
if (mark[i])
cnt++;
}
if (cnt < m)
{
printf("0\n");
printf("%d\n",m - cnt);
return ;
}
sort(range + ,range + len + ,cmp);
int r = range[].second , ans = , pos = ;
while (r < m)
{
int mx = r;
while (pos <= len && range[pos].first <= r + )
{
mx = max(mx,range[pos].second);
pos++;
}
r = mx;
ans++;
}
printf("1\n%d\n",ans); return ; }

最新文章

  1. jquery $.trim()去除字符串空格详解
  2. C# WinForm应用程序降低系统内存占用方法
  3. HDU3586 Information Disturbing(树形DP)
  4. 四个很好用的Sql Server 日期函数:DateDiff、DatePart、DateAdd、DateName
  5. Threading in C#
  6. PPTP模式跟L2TP模式有什么不同
  7. uestc 1722 吴神的表白
  8. HW6.1
  9. Apache下安装配置mod_pagespeed模块,轻松完成网站提速
  10. Xcode中的Info.plist字段列表详解
  11. CSS应用五
  12. hdu 2563 统计问题
  13. Boost 库Program Options--第二篇
  14. EtherChannel Cisco 端口聚合详解
  15. IIS 设置查询字符串长度
  16. IntelliJ IDEA LicenseServer激活及使用
  17. Python sqlalchemy orm 外键关联
  18. Python 正则表达式模块 (re) 简介
  19. liunx 随笔集
  20. orcle 远程连接其他数据库 进行查询数据

热门文章

  1. Buffer.from(str[, encoding])
  2. nginx配置文件+本地测试请求转发到远程服务器+集群
  3. Mac使用Aria2下载百度网盘,突破下载限速的方法教程
  4. Android BGABadgeView:BGABadgeFrameLayout(5)
  5. 安装eclipse插件,很慢终于找到了解决的方法
  6. Linux下汇编语言学习笔记13 ---
  7. The Java library for converting Wikipedia wikitext notation to HTML
  8. HDU4325 树状数组+离散化
  9. POJ1328 Radar Installation 解题报告
  10. springboot 关于第三方包 打包问题