LOJ 劳孙肉饼
题目链接
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;
}
LOJ 劳孙肉饼的更多相关文章
- IT人怎样防止过劳死?如何成为时间的主人?
投行的朋友还没走几天,搜狐的一位同胞又去了.又是过劳死! 每当读到这类新闻,IT人无不反镜自照,顾影自怜.无法拼爹拼钱的我们,似乎只有拼命了.生活好惨淡啊! 有人说:年轻人,悠着点儿!立刻 ...
- 孙鑫VC学习笔记:多线程编程
孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified ...
- 聊聊JS与设计模式之(工厂Factory)篇------(麦当劳的故事)
一,总体概要 1,笔者浅谈 说起设计模式其实并不是什么很新奇的概念,它也不是基于特定语言所形成的产物,它是基于软件设计原则以及相关的方法论和经过特定时期衍生出的若干解决方案.本文会以一个实例带入大家学 ...
- 孙鑫视频学习:VS2010中找不到【Tab order】菜单项
在学习孙鑫视频中,修改Tab顺序时,找不到VC6.0中提到的[Layout]->[Tab order]菜单项,但VC2010中可以用Ctrl+D调出来Tab顺序,或者[格式]->[Tab键 ...
- 孙鑫视频学习:改变窗口过程函数中出现error C2440错误的解决方法
在Visual Studio 2010中,即使代码是完完全全按照孙鑫视频中的敲,也会在出现error C2440,这是因为开发平台由VC6.0升级至VS2010,需要将原有的项目迁移.VS2010对消 ...
- 孙鑫视频学习:关于Visual Studio 2010中MFC工程的消息WM_INITDIALOG找不到的问题
学习孙鑫的那个深入详解C++视频时,有一处给编辑框空间改写窗口过程函数的例子,其中需要添加一个WM_INITDIALOG消息响应函数,但在类向导的消息栏下找不到WM_INITDIALOG消息.解决方法 ...
- [置顶] Linux高编之进程--------fork函数的同步与异步(兄弟子进程和父子孙进程示列)
前面讲述的fork函数的基本用法,下面通过两个程序来说明fork函数同步与异步之间的关系: <1>通过fork函数实现在父进程下的四个兄弟子进程(即异步) : 函数实现代码: #inclu ...
- 乐酷工作室孙志伟:Testin云測试有广度有深度 省钱省力值得信赖
乐酷工作室孙志伟:Testin云測试有广度有深度 省钱省力值得信赖 2014/10/16 · Testin · 开发人员訪谈 乐酷工作室是一个专业从事移动终端应用及游戏自主研发和运营的创业团队,眼下拥 ...
- 孙弘与Masa Maso 做互联网最贵的衬衫(2)_人物对话_中国时尚品牌网
孙弘与Masa Maso 做互联网最贵的衬衫(2)_人物对话_中国时尚品牌网 孙弘与Masa Maso 做互联网最贵的衬衫(2)
随机推荐
- java-局部变量,成员变量区别
1. 内存中的位置 成员变量: 堆内存 局部变量: 栈内存 2. 生命周期 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法调用完毕而消失 3. 注意事项 ...
- JAVA输出流与输入流
输出流 编程入门的第一个程序,输出一串字符串 public class C { public static void main(String[] args) { System.out.println( ...
- 【笔记】机器学习 - 李宏毅 - 1 - Introduction & next step
Machine Learning == Looking for a Function AI过程的解释:用户输入信息,计算机经过处理,输出反馈信息(输入输出信息的形式可以是文字.语音.图像等). 因为从 ...
- BFS和队列
深度优先搜索(DFS)和广度优先搜索(BFS)是基本的暴力技术,常用于解决图.树的遍历问题. 首先考虑算法思路.以老鼠走迷宫为例: (1):一只老鼠走迷宫.它在每个路口都选择先走右边,直到碰壁无法继续 ...
- win10家庭版更改本地账户名、C盘Users下文件夹名和环境变量等
PS:由于四五年前装系统的时候懵懵懂懂的敲了一个中文用户名(有一个字还打错了,尴尬),导致现在打开cmd默认是C:\Users\中文名,path环境变量中也有中文路径,有时候有些程序的路径也是中文,这 ...
- java集合框架备忘
List,Set,Map三者的区别? List(对付顺序的好帮手): List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象 Set(注重独一无二的性质): 不允许重复的集合.不会有多 ...
- python3运行时候报错集锦:读取文件报错
1.关于读取文件报错: 命令执行到cf.read(cfpath),出现如下报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa0 in po ...
- POJ 1099 Square Ice 连蒙带猜+根据样例找规律
目录 题面 思路 思路 AC代码 题面 Square Ice Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4526 A ...
- nginx配置从远程获取静态资源
前置条件:现有两台内网互通机器192.168.0.100.192.168.0.101,其中192.168.0.100可以通过外网网络.业务需求:需要通过外网访问处于192.168.0.101机器上的静 ...
- 题解 CF171A 【Mysterious numbers - 1】
又是愚人节题目qwq-- 说一下题意吧: 把第1个数翻转后加第二个数 具体思路: 1.定义变量,进行输入 int a,b; cin>>a>>b; 2.定义一个变量c,作为存储第 ...