大难(水)题:修剪草坪(C++)

题目:

Description

给定一个n*m的矩阵,每次你可以选择前进一格或转弯(90度), 求在不出这个矩阵的情况下遍历全部格点所需最少转弯次数。 有多组数据

Format

Input

第一行给出数字组数据 对于每组数据 每一行包含两个正整数N和M(1 ≤ N, M ≤ 1 000 000), 分别表示每大块土地可以看成N× M小块

Output

对于每一大块土地,输出修剪草坪需要的最少转弯次数

Samples

输入数据 1

1
5 8

Copy

输出数据 1


8

Copy

输入数据 2

3
1 1
3 3
3 4

Copy

输出数据 2


0
4
4

Copy

Limitation

1s, 1024KiB for each test case.

这道题.....

真的没什么难的,就是绕了个弯,我写这篇文章就是为了水一篇

我们来看一下:

如果草坪是这样的:长5格,宽4格。

步数最少的是像这样走之字形:

每次就应该走宽*2-2次(开始和结束不转弯);

代码实现:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int s,a,b;
	cin>>s;
	for(int i=1; i<=s; i++) {
		cin>>a>>b;
		cout<<min(a,b)*2-2<<endl;//min(a,b):找出宽的长度 
	}
	return 0;
}

好了,这道题就ak了,请大家三连(点赞、关注、收藏)一下,谢谢各位观众老爷了!! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个比较复杂的问,需要用到一些概率和图论的知识。我会尽力解答,但可能会有一些难以理解的地方。 首先,我们需要了解什么是最大团。在一个无向图中,如果一个完全子图(即子图中的任意两个节点都有一条边相连)不再能加入新的节点而保持完全性,那么这个子图就是一个团。而最大团则是指节点数最多的团。 接下来,我们来考虑如何求解最大团个数的期望。设 $f(G)$ 表示图 $G$ 的最大团个数,$p_G$ 表示 $G$ 出现的概率,$n$ 表示节点数,则最大团个数的期望为: $$E[f] = \sum_G f(G)p_G$$ 其中,$G$ 是所有 $n$ 个节点的无向图的集合。 接着,我们需要找到一个求解 $E[f]$ 的方法。根据期望的定义,我们有: $$E[f] = \int_0^{\infty} P(f > t) dt$$ 其中,$P(f > t)$ 表示最大团个数大于 $t$ 的概率。显然,我们可以采用计数的方法来求解 $P(f > t)$,即: $$P(f > t) = \frac{\sum_{G:f(G) > t} p_G}{\sum_{G} p_G}$$ 这里的分母是所有图的概率之和,分子是最大团个数大于 $t$ 的图的概率之和。 现在的问是如何计算 $P(f > t)$。我们可以考虑使用一个重要的结论:在一个 $n$ 个节点的随机无向图中,最大团的大小的期望值为 $\Theta(\log n)$。具体来说,这个结论是由 Erdős 和 Rényi 在 1960 年证明的。 基于这个结论,我们可以得到: $$P(f > t) \leq \sum_{k=t+1}^{n} \binom{n}{k} 2^{\binom{k}{2}} 2^{-\binom{n}{2}}$$ 其中,$\binom{n}{k}$ 表示从 $n$ 个节点中选取 $k$ 个节点的组合数,$2^{\binom{k}{2}}$ 表示一个 $k$ 个节点的完全图中存在的团的个数,$2^{-\binom{n}{2}}$ 表示所有 $n$ 个节点的无向图出现的概率。 继续化简,我们可以得到: $$P(f > t) \leq \sum_{k=t+1}^{n} \left(\frac{en}{k}\right)^k$$ 其中,$e$ 表示自然对数的底数。 最后,将 $P(f > t)$ 代入 $E[f]$ 的式子中,我们可以得到: $$E[f] = \int_0^{\infty} P(f > t) dt \leq \int_0^{\infty} \sum_{k=t+1}^{n} \left(\frac{en}{k}\right)^k dt$$ $$= \sum_{k=2}^{n} \frac{1}{k^2} \left(\frac{en}{k}\right)^k$$ 因此,最大团个数的期望值为 $\Theta(\frac{n^2}{\log n})$。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值