LOJ 劳孙肉饼
2024-10-08 11:22:07
题目链接
XRRRRQAQ 去学文化的的样子太萌啦!!!
XRRRRQAQ 在课上太无聊,以至于吃起了劳孙(你不用知道这是什么)
显然劳孙是一个 N * M 的肉饼(即N行 M 列)
XRRRRQAQ 每次可以将一个矩形劳孙啃下来一行或一列
XRRRRQAQ 每吃一次劳孙都可能引起劳师的注意,这很刺激
XRRRRQAQ 为了寻求最多的刺激,打算用最多的次数吃完这个大劳孙
他想问你:他最多刺激几次呢??答案对 1e9+7 取模
样例输入 1
2 3
样例输出 1
5
样例解释 1
先啃掉第 2 列,然后就剩下了两个 2 * 1 的小肉饼,每个都可以啃 2 次(先啃掉一行,再啃掉另一行)
故输出 5
样例输入 2
3 10
样例输出 2
21
样例输入 3
100 200
样例输出 3
10149
\(N , M <= 10^{18}\) 时间限制 50 ms
这题n,m这么大,肯定是个贪心 , 先用dp打表 , 发现让 n <= m(好像无所谓,不过这样打表明显一点)
从 1 开始枚举m ,
发现
- 第一项是 n
- 之后每一项类似等差数列
- 当 n 为奇数时 , 公差为 \((n + 1) / 2\)
- 当 n 为偶数是, 公差交替为\(n / 2\) 与$ n / 2 + 1$ , (就是交替进行)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mod = 1e9+7;
const int N = 310;
int n , m;
int dp[N][N];
int calc(int n , int m) // 打表
{
if(n <= 0 || m <= 0) return dp[n][m] = 0;
if(n == 1) return dp[n][m] = m;
if(m == 1) return dp[n][m] = n;
if(~dp[n][m]) return dp[n][m];
register int ans = 0 , i;
for(i = 1 ; i <= n ; ++i) ans = max(ans , calc(i - 1 , m) + calc(n - i , m) + 1);
for(i = 1 ; i <= m ; ++i) ans = max(ans , calc(n , i - 1) + calc(n , m - i) + 1);
return dp[n][m] = ans;
}
long long mul(long long a , long long k)
{
long long ans = 0; a %= mod;
for( ; k ; k >>= 1 , a = (a + a) % mod)
if(k & 1) ans = (ans + a) % mod;
return ans;
}
int main()
{
long long n , m; cin >> n >> m;
if(n > m) swap(n , m);
if(n & 1)
{
long long d = (n + 1) / 2;
cout << (n + mul(d , m - 1)) % mod << endl;
}
else
{
long long d1 = n / 2 , d2 = d1 + 1; m--;
cout << ((n + mul((m + 1) / 2 , d1)) % mod + mul(m - (m + 1) / 2 , d2)) % mod << endl;
}
return 0;
}
最新文章
- 访问IIS网站需要输入用户名密码(非匿名登录)问题汇总
- C#性能测试方法
- 小Q系列之 最佳裁判
- Android开发常用的一些第三方网站
- centos6 pxe minimal install
- MD5加密函数
- 如何使用Ubuntu online account API创建微博HTML5申请书
- json_encode转成带 花括号的{ } 和 中括号的[ ] 2种 形式 json数据
- smarty模板基础2
- idea和androidstudio的首次git配置一些问题
- JS的splice()方法在for循环中使用可能会遇到的坑
- vue路由请求 router
- jmeter javamail 邮件格式再优化(由详情——>;改为统计)
- 【XSY2718】gift 分数规划 网络流
- 二叉树的python可视化和常用操作代码
- 【UML】NO.52.EBook.5.UML.1.012-【UML 大战需求分析】- 交互概览图(Interaction Overview Diagram)
- ocp linux 基础要点
- Echarts地图绘制(散点,色卡)
- read/write函数与(非)阻塞I/O的概念
- 让IE6也支持position:fixed
热门文章
- CMake 复制文件方法
- docker镜像alpine封装nginx1.16.1【dockerfile】
- 关于Java8中的Comparator那些事
- Cows Of The Round Table【DFS】
- Android_关于自定义view的dialog有黑影的问题
- vs2008 asp.net “无法连接到ASP.NET Development server”
- 2级搭建类202-Oracle 18c SI ASM 静默搭建(OEL7.7)公开
- 1级搭建类106-Oracle 19c 单实例 FS(华为云)公开
- CSS的列表样式和网页背景
- AcWing 6. 多重背包问题 III