CF889 E Mod Mod Mod——DP
题目:http://codeforces.com/contest/889/problem/E
这题真好玩。
官方题解说得很好。
想到相邻 a[ i ] 之间的段可能可以一起维护,但是不太会。
原来是表示成 i*x+k 的形式。其中 x 是具体的值,放在 DP 数组里只要记录 “ x<= ... 的 x 都满足这个式子” 就行,因为每次经过一个 i ,范围都是保留最底部的一些之类的。
然后写了一个不行的代码。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
ll rdn()
{
ll ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
ll Mx(ll a,ll b){return a>b?a:b;}
const int N=2e5+,M=N*;
int n,tot,l[N],r[N];ll a[N],dp[M],dy[M],ans;
map<ll,int> mp[N];
int main()
{
n=rdn();
for(int i=;i<=n;i++)a[i]=rdn();
r[]=++tot; dp[tot]=; dy[tot]=a[]-;
for(int i=;i<n;i++)
{
l[i+]=r[i]=tot;
for(int j=l[i]+,d;j<=r[i];j++)
{
ll k=dp[j],r=dy[j],tp=r%a[i+];
if(r>=a[i+])
{
if(!mp[i+].count(a[i+]-))
{
mp[i+][a[i+]-]=++tot;
dy[tot]=a[i+]-;
}
d=mp[i+][a[i+]-];
dp[d]=Mx(dp[d],k+i*(r-tp-a[i+]));
}
if(!mp[i+].count(tp))
{
mp[i+][tp]=++tot; dy[tot]=tp;
}
d=mp[i+][tp];
dp[d]=Mx(dp[d],k+i*(r-tp));
}
}
for(int i=l[n]+;i<=tot;i++)
{
ll k=dp[i],r=dy[i];
ans=Mx(ans,n*r+k);
}
printf("%lld\n",ans);
return ;
}
不能遍历 r 没有变的位置。也不能让它们占用更多空间,比如在 i 处用一个位置、又在 i+1 处用一个位置。
然后抄了一番题解。原来 map 可以这样遍历。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
ll rdn()
{
ll ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
ll Mx(ll a,ll b){return a>b?a:b;}
const int N=2e5+;
int n;ll a[N],ans;
map<ll,ll> mp;
map<ll,ll>::iterator it;
int main()
{
n=rdn();for(int i=;i<=n;i++)a[i]=rdn();
mp[a[]-]=;
for(int i=;i<n;i++)
{
while()
{
it=mp.end(); it--;
ll r=(*it).first, k=(*it).second;
if(r<a[i+])break;
mp.erase(it);
mp[a[i+]-]=Mx(mp[a[i+]-],k+i*(r-r%a[i+]-a[i+]));
mp[r%a[i+]]=Mx(mp[r%a[i+]],k+i*(r-r%a[i+]));
}
}
for(it=mp.begin();it!=mp.end();it++)
ans=Mx(ans,n*(*it).first+(*it).second);
printf("%lld\n",ans);
return ;
}
CF889 E Mod Mod Mod——DP的更多相关文章
- HDU - 4389 X mod f(x)(数位dp)
http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 为[A,B] 区间内的数能刚好被其位数和整除的数有多少个. 分析 典型的数位dp...比赛时想不出状 ...
- HDOJ 4389 X mod f(x)
数位DP........ X mod f(x) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- HDU 4389 X mod f(x)
题意:求[A,B]内有多少个数,满足x % f(x) == 0. 解法:数位DP.转化为ans = solve(b) - solve(a - 1).设dp[i][sum][mod][r]表示长度为i, ...
- FZU 1752 A^B mod C(快速加、快速幂)
题目链接: 传送门 A^B mod C Time Limit: 1000MS Memory Limit: 65536K 思路 快速加和快速幂同时运用,在快速加的时候由于取模耗费不少时间TLE了 ...
- hdu.1104.Remainder(mod && ‘%’ 的区别 && 数论(k*m))
Remainder Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 关于n!mod p
2016.1.26 让我们来研究一下关于n!在mod p下的性质,当然这里p是质数. 首先n!=a*pe,其中p不可整除a.我们现在来做两件事情,求e和a mod p. 显然,n/p表示[1,n]中p ...
- 取模(mod)
取模(mod) [题目描述] 有一个整数a和n个整数b_1, …, b_n.在这些数中选出若干个数并重新排列,得到c_1,…, c_r.我们想保证a mod c_1 mod c_2 mod … mod ...
- 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 ...
- Mod 与 RequireJS/SeaJS 的那些事
本文的目的是为了能大让家更好的认识 Mod,之所以引入 RequireJS/SeaJS 的对比主要是应大家要求更清晰的对比应用场景,并不是为了比较出孰胜孰劣,RequireJS 和 SeaJS 都是模 ...
- 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 ...
随机推荐
- vue中淡入淡出示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Map m=new HashMap()
Map<String,String> m=new HashMap<String,String>() 等于 HashMap<String,String> hashMa ...
- js json中的时间转换格式
//根据json中的日期格式,转换成yyyy-mm-dd HH:mm:ss function ChangeDateFormat(cellval) { var date = new Date(parse ...
- C语言 malloc()、memcpy()、free()等
1.malloc()函数: void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <al ...
- SCUT - 11 - 被钦定的选手 - 质因数分解
https://scut.online/p/11 T了好多次,还想用mutimap暴力分解每个数的质因数.后来记录每个数的最小质因子过了. #include <bits/stdc++.h> ...
- Log4Net 之将自定义属性记录到文件中 (三)
原文:Log4Net 之将自定义属性记录到文件中 (三) 即解决了将自定义属性记录到数据库之后.一个新的想法冒了出来,自定义属性同样也能记录到文件中吗?答案是肯定的,因为Log4Net既然已经考虑到了 ...
- 加密模块hashlib
#coding=utf-8 import ConfigParser #配置文件模块 import hashlib #用于加密的模块 m = hashlib.md5() m.update(b'hello ...
- echart 属性设计大全
// 全图默认背景 // backgroundColor: ‘rgba(0,0,0,0)’, // 默认色板 color: ['#ff7f50','#87cefa','#da70d6','#32cd ...
- Linux延时执行命令at
也许你的Ubuntu没有at命令,先安装 - sudo apt install at 在某时刻执行命令 - at 15:30:回车之后,需要在at后输入指令,表示在15:30要执行的指令 - 比如输入 ...
- 调用SM30数据表维护的函数
相关文章:http://www.cnblogs.com/caizjian/p/3248499.html 1.se11进去新建一个数据表 2.se55进去生产表维护 3.sm30进去维护数据表 4.se ...