题目链接

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 ,

发现

  1. 第一项是 n
  2. 之后每一项类似等差数列
  3. 当 n 为奇数时 , 公差为 \((n + 1) / 2\)
  4. 当 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 劳孙肉饼的更多相关文章

  1. IT人怎样防止过劳死?如何成为时间的主人?

    投行的朋友还没走几天,搜狐的一位同胞又去了.又是过劳死!    每当读到这类新闻,IT人无不反镜自照,顾影自怜.无法拼爹拼钱的我们,似乎只有拼命了.生活好惨淡啊!    有人说:年轻人,悠着点儿!立刻 ...

  2. 孙鑫VC学习笔记:多线程编程

    孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified ...

  3. 聊聊JS与设计模式之(工厂Factory)篇------(麦当劳的故事)

    一,总体概要 1,笔者浅谈 说起设计模式其实并不是什么很新奇的概念,它也不是基于特定语言所形成的产物,它是基于软件设计原则以及相关的方法论和经过特定时期衍生出的若干解决方案.本文会以一个实例带入大家学 ...

  4. 孙鑫视频学习:VS2010中找不到【Tab order】菜单项

    在学习孙鑫视频中,修改Tab顺序时,找不到VC6.0中提到的[Layout]->[Tab order]菜单项,但VC2010中可以用Ctrl+D调出来Tab顺序,或者[格式]->[Tab键 ...

  5. 孙鑫视频学习:改变窗口过程函数中出现error C2440错误的解决方法

    在Visual Studio 2010中,即使代码是完完全全按照孙鑫视频中的敲,也会在出现error C2440,这是因为开发平台由VC6.0升级至VS2010,需要将原有的项目迁移.VS2010对消 ...

  6. 孙鑫视频学习:关于Visual Studio 2010中MFC工程的消息WM_INITDIALOG找不到的问题

    学习孙鑫的那个深入详解C++视频时,有一处给编辑框空间改写窗口过程函数的例子,其中需要添加一个WM_INITDIALOG消息响应函数,但在类向导的消息栏下找不到WM_INITDIALOG消息.解决方法 ...

  7. [置顶] Linux高编之进程--------fork函数的同步与异步(兄弟子进程和父子孙进程示列)

    前面讲述的fork函数的基本用法,下面通过两个程序来说明fork函数同步与异步之间的关系: <1>通过fork函数实现在父进程下的四个兄弟子进程(即异步) : 函数实现代码: #inclu ...

  8. 乐酷工作室孙志伟:Testin云測试有广度有深度 省钱省力值得信赖

    乐酷工作室孙志伟:Testin云測试有广度有深度 省钱省力值得信赖 2014/10/16 · Testin · 开发人员訪谈 乐酷工作室是一个专业从事移动终端应用及游戏自主研发和运营的创业团队,眼下拥 ...

  9. 孙弘与Masa Maso 做互联网最贵的衬衫(2)_人物对话_中国时尚品牌网

    孙弘与Masa Maso 做互联网最贵的衬衫(2)_人物对话_中国时尚品牌网 孙弘与Masa Maso 做互联网最贵的衬衫(2)

随机推荐

  1. C++ 与String有关的函数!!!

    String函数 1.字符串的输入 (1) string s; cin >> s;//碰到空格等分隔符会终端输入 /* string s; cin >> s;//如果输入 he ...

  2. 通过sd文件发布的FeatureAccess服务不能查看到图层

    发布服务有两种方法, 1. 用ArcMap --Share As - service --publish a service 此方法可以直接将地图数据发布到ArcGIS  Server 的地图服务中, ...

  3. Navicat Premium15安装与激活(破解)

    Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL 资料库,让管理不 ...

  4. dp --A - Super Jumping! Jumping! Jumping!

    A - Super Jumping! Jumping! Jumping! Nowadays, a kind of chess game called “Super Jumping! Jumping! ...

  5. 复习node中加载静态资源--用express+esj

    不做解释,代码一看就懂 app.js import express from 'express' import config from './config' const app = express() ...

  6. 与soul上的一个妹子聊天有感

    写此篇的原因: 妹子说,我考上公务员了~,当时自己自己顿时哽咽了,不知道说什么,习惯性的说了句,恭喜恭喜啊.感受到妹子的欢喜与喜悦,我也没必要打扰她的兴致,她开心就好了嘛. 每个人的成就都是自己奋斗的 ...

  7. mysql 获取当前时间加上一个月

    select DATE_ADD(NOW(), interval 1 MONTH) NOW()此处必须为时间格式 date_add() 增加 date_sub()减少 month 月份 minute 分 ...

  8. 关于JavaScript的原型继承与原型链

    在讨论原型继承之前,先回顾一下关于创建自定义类型的方式,这里推荐将构造函数和原型模式组合使用,通过构造函数来定义实例自己的属性,再通过原型来定义公共的方法和属性. 这样一来,每个实例都有自己的实例属性 ...

  9. laravle中orm简单的增删改查

    友情提示请在有laravel基础的情况下观看文章 1.数据库信息(user表) CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...

  10. 【转】IEnumerable接口的一个简单示例

    转:https://blog.csdn.net/wang371756299/article/details/8197075 摘要: IEnumerable接口是实现foreach循环的一个重要的接口, ...