题目传送门


分析

这道题有一个很妙的地方就是将一段前缀整体一起做。

设 \(dp[i][j]\) 表示\(x\) 被前 \(i\) 个数取模后答案最大,并且 \(j\) 为取得此答案的最大值

最后再对 \(dp[i][j]+n*j\) 取最大值即可。

如果 \(j\) 被 \(a_i\) 取模之后仍然保留 \(j\),那么 \(dp[i][j\bmod a_i]=\max\{dp[i-1][j]+(j-j\bmod a_i)*(i-1)\}\)

如果不保留 \(j\),那么 \(dp[i][a_i-1]=\max\{dp[i-1][j]+\left\lfloor \frac{j-(a_i-1)}{a_i}\right\rfloor*a_i*(i-1)\}\)

然后取模之后会减半,所以时间复杂度为 \(O(n\log n\log a_i)\)


代码

#include <cstdio>
#include <cctype>
#include <map>
#include <algorithm>
using namespace std;
const int N=200011;
typedef long long lll;
map<lll,lll>dp; lll n,a[N],ans;
map<lll,lll>::iterator it;
lll iut(){
lll ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
int main(){
n=iut();
for (int i=1;i<=n;++i) a[i]=iut();
dp[a[1]-1]=0;
for (int i=2;i<=n;++i){
for (it=dp.lower_bound(a[i]);it!=dp.end();dp.erase(it++)){
lll x=it->first,y=it->second,t0=dp[x%a[i]],t1=dp[a[i]-1];
if (t0<y+(x-x%a[i])*(i-1)) dp[x%a[i]]=y+(x-x%a[i])*(i-1);
if (t1<y+(x+1-a[i])/a[i]*a[i]*(i-1)) dp[a[i]-1]=y+(x+1-a[i])/a[i]*a[i]*(i-1);
}
}
for (it=dp.begin();it!=dp.end();dp.erase(it++)){
lll x=it->first,y=it->second;
if (ans<x*n+y) ans=x*n+y;
}
return !printf("%lld",ans);
}

#动态规划#CF889E Mod Mod Mod的更多相关文章

  1. FZU 1752 A^B mod C(快速加、快速幂)

    题目链接: 传送门 A^B mod C Time Limit: 1000MS     Memory Limit: 65536K 思路 快速加和快速幂同时运用,在快速加的时候由于取模耗费不少时间TLE了 ...

  2. hdu.1104.Remainder(mod && ‘%’ 的区别 && 数论(k*m))

    Remainder Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  3. 关于n!mod p

    2016.1.26 让我们来研究一下关于n!在mod p下的性质,当然这里p是质数. 首先n!=a*pe,其中p不可整除a.我们现在来做两件事情,求e和a mod p. 显然,n/p表示[1,n]中p ...

  4. 取模(mod)

    取模(mod) [题目描述] 有一个整数a和n个整数b_1, …, b_n.在这些数中选出若干个数并重新排列,得到c_1,…, c_r.我们想保证a mod c_1 mod c_2 mod … mod ...

  5. BSGS模版 a^x=b ( mod c)

    kuangbin的BSGS: c为素数: #define MOD 76543 int hs[MOD],head[MOD],next[MOD],id[MOD],top; void insert(int ...

  6. Mod 与 RequireJS/SeaJS 的那些事

    本文的目的是为了能大让家更好的认识 Mod,之所以引入 RequireJS/SeaJS 的对比主要是应大家要求更清晰的对比应用场景,并不是为了比较出孰胜孰劣,RequireJS 和 SeaJS 都是模 ...

  7. C(n+m,m) mod p的一类算法

    Lucas定理 A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]. 则组合数C(A,B)与C(a[n],b[n])*C(a[n ...

  8. Mod in math

    An Introduction to Modular Math When we divide two integers we will have an equation that looks like ...

  9. 51nod 1008 N的阶乘 mod P

    输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)   例如:n = 10, P = 11,10! = 3628800 3628800 % 11 = 10   Input 两 ...

  10. 51 Nod 1008 N的阶乘 mod P【Java大数乱搞】

    1008 N的阶乘 mod P 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)   例如:n ...

随机推荐

  1. 小程序中用css修改svg的颜色

    记一下(#^.^#) <div class="svg"> <img src="./firefox-logo.svg" class=" ...

  2. 项目实战:Qt终端命令模拟工具 v1.0.0(实时获取命令行输出,执行指令,模拟ctrl+c中止操作)

    需求   在Qt软件中实现部分终端控制命令行功能,使软件内可以又好的模拟终端控制,提升软件整体契合度.   Demo演示          运行包下载地址:   CSDNf粉丝0积分下载:https: ...

  3. 利用wiile双层循环打印各种星星---day06

    # 十行十列小星星 j = 0 #定义行数 while j<10: #当行数小于10的时候 i=0 #定义列 while i <10: #当列小于10的时候 print('*',end=' ...

  4. 图书管理系统---基于ajax删除数据

    book_list.html代码 {% load static %} <!DOCTYPE html> <html lang="en"> <head&g ...

  5. django学习第十一天---django操作cookie和session

    Cookie cookie解析 会话 http协议是无状态的,无连接的 导致每次客户端访问服务端需要登录成功之后才能访问的页面,都需要用户再重新登录一遍,用户体验极差. 客户端想了个办法,cookie ...

  6. 大众点评-CAT监控平台

    前言 我们禀着发现问题,解决问题的方针,针对后台诸多的服务,如何实时监控接口性能和访问频率,还要统计大盘信息?CAT作为大众点评开源的系统监控平台项目,下面就介绍一下CAT平台的搭建步骤. CAT作为 ...

  7. linux基本知识汇总2(系统编程) 60000字汇总

    /////////////进程/任务 -- task任何启动并运行程序的行为,都是由操作系统帮助我们将程序转换成进程 -- 进程:完成特定的任务 进程控制块:PCB(win) / task_struc ...

  8. WebView无法加载页面报错 net:ERR_CLEARTEXT_NOT_PERMITTED 还有webView加载网页后出现ERR_UNKNOWN_URL_SCHEME

    根据网络安全配置- 从Android 9(API级别28)开始,默认情况下禁用明文支持.因此http的url均无法在webview中加载 还可以看看-https: //koz.io/android-m ...

  9. spring源码手写aop

    AOP:       aop切面编程,其实就是spring增强器的一个扩展,就是通过beanPostProcessor的after后置方式实现的,其中在after中把需要的bean通过放射+动态代理完 ...

  10. 搞清楚Promise.all的异常处理

    参考资料: https://www.jianshu.com/p/356f10ee476d https://blog.csdn.net/aaqingying/article/details/122966 ...