题目

搜索加贪心其实并不需要用到\(DP\),搜索也是比较简单地搜索。

对于每个第一行的城市进行类似于滑雪那道题的搜索,然后记录最后一行它所覆盖的区间,易得一个一行城市只会有一个区间。然后可以在最后进行线段覆盖贪心即可求出答案。要注意区间闭开和边界问题。

\(Code\)

#include <bits/stdc++.h>
#define N 501
using namespace std;
int di[5] = {0, 1, -1, 0, 0}; int dj[5] = {0, 0, 0, 1, -1};
int n, m, flag, tot, data[N][N], vis[N], dp[N][N];
struct C7 {
int i, j;
};
struct block {
int l, r;
}s[100010];
bool cmp(block a, block b)
{
if (a.l == b.l)
return a.r > b.r;
return a.l < b.l;
}
inline void init()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &data[i][j]);
}
inline void bfs()
{
queue <C7> q;
for (int o = 1; o <= m; o++)
{
memset(dp, 0, sizeof(dp));
if (n == 1) vis[o] = 1;
dp[1][o] = o;
q.push({1, o});
while (!q.empty())
{
C7 cur = q.front(); q.pop();
int i = cur.i, j = cur.j;
for (int k = 1; k <= 4; k++)
{
int nexi = i + di[k], nexj = j + dj[k];
if (nexi <= 0 || nexj <= 0 || nexi > n || nexj > m)
continue;
if (!dp[nexi][nexj] && data[nexi][nexj] < data[i][j])
{
dp[nexi][nexj] = o;
q.push({nexi, nexj});
if (nexi == n)
vis[nexj] = 1;
}
}
}
flag = 0;
for (int i = 1; i <= m + 1; i++)
{
if (dp[n][i] && !flag)
{
flag = 1;
s[++tot].l = i;
}
if (!dp[n][i] && flag)
{
s[tot].r = i;
flag = 0;
}
}
}
}
inline void prin()
{
int ans = 0;
for (int j = 1; j <= m; j++)
if (vis[j])
ans++;
if (ans != m)
printf("0\n%d", m - ans);
else
{
sort(s + 1, s + 1 + tot, cmp);
// for (int i = 1; i <= tot; i++)
// printf("%d %d\n", s[i].l, s[i].r);
// return;
int ans = 0, left = 0, right = 0;
for (int i = 1; i <= tot; i++)
{
if (left >= s[i].l)//要加=号,这是贪心的线段覆盖的模板。
right = max(right, s[i].r);
else
{
ans++;
left = right;
right = max(right, s[i].r);
}
if (right > m) break;
}
printf("1\n%d", ans);
}
}
int main()
{
init();
bfs();
prin();
return 0;
}

最新文章

  1. hdu 4741 2013杭州赛区网络赛 dfs ***
  2. javaBean List Map json(转)
  3. spring4.0整合mongodb3.0.4项目实践(用户验证)
  4. hdu 1222 Wolf and Rabbit
  5. poj 3274 Gold Balanced Lineup(哈希 )
  6. Java - 使用 XSD 校验 XML
  7. 洛谷P1157 组合的输出
  8. 使用Map标签指定点击区域时的兼容性问题
  9. 使用Atlas进行元数据管理之容错和高可用
  10. Java实现视频转码或压缩demo.
  11. redis 序列化存入对象
  12. C++ Primer Plus (Stephen Prata 著)
  13. 10K+,深度学习论文、代码最全汇总!
  14. leetcode: 638.大礼包
  15. Spring事务传播行为
  16. Android studio 学习资料汇总
  17. centos7 修改中文字符集 How to avoid having to `export LC_ALL=“zh_CN.UTF-8”` upon each SSH connection
  18. 通过python给mysql建表
  19. 修复损坏的 shapefile
  20. [转]Hspice 语法手册

热门文章

  1. php 中header头的使用
  2. docker 入坑1
  3. C# 连接SQLServer数据库自动生成model类代码
  4. 使用jQuery开发datatable分页表格插件
  5. 深入剖析Linux IO原理和几种零拷贝机制的实现
  6. 二叉树&amp;满二叉树与完全二叉树
  7. &#39;adb&#39; 不是内部或外部命令,也不是可运行的程序 或批处理文件—解决方法
  8. JavaScript之运算符
  9. iOS静态库相关-封装lib
  10. SVN 提交失败 非LF行结束符