小朋友的数字

题目链接

题目翻译:

每个小朋友有一个数字,构成一个数字序列a1,a2…an

我们定义“特征值”fi为a1~ai中的最大连续子段和

再定义“分数”si为1~i-1中最大的(sj+fj),特殊的,s1=f1,

要求输出最大的si

DP:

于是我们可以dp求出每个最大连续子段和作为特征值

然后按题意模拟一遍求出每个分数

状态定义:

dp[i]表示以i为结尾的最大子段和

方程

dp[i]=max(dp[i-1],0)+x; //连着/不连着 前面

f[i]=max(f[i-1],dp[i]);

优化:

空间:

我们发现f[i]、dp[i]都是由f[i-1]、dp[i-1]转移来的,我们可以考虑将数组降一维 于是空间复杂度就是常数级别的了

时间:

1.1e6的数据快读是有一定作用的

2.边读入边处理,减少常数

3.由于要用long long,取模运算很慢,可以考虑减少取模次数,当ans>1e17时再取模

#include<cstdio>
using namespace std;
#define int long long
#define N 1000010
#define INF 0x3f3f3f3f
const int ch_top=4e7+;
char ch[ch_top],*now_r=ch-,*now_w=ch-;
inline int read(){ //快读
int f=;
while(*++now_r<'') if(*now_r=='-') f=-;
register int x=*now_r-'';
while(*++now_r>='')x=(x<<)+(x<<)+*now_r-'';
return x*f;
}
inline void write(int x){ //并没用什么卵用的快写
if(x<){*++now_w='-',x=-x;}
static char st[];static int top;
while(st[++top]=''+x%,x/=);
while(*++now_w=st[top],--top);
*++now_w='\n';
}
int n,p,dp,ans1,ans;
bool flag;
#undef int
int main()
#define int long long
{
fread(ch,,ch_top,stdin);//快读
n=read(); p=read();
int x,f;
dp=f=read();
ans1=f;ans=f*; //特殊处理第一个数
/*ans1为第一个小朋友的分数,
ans为其他小朋友的分数的最大值*/
for(int i=;i<n;i++){
x=read();
dp=(dp>?dp:)+x;
if(dp>f) f=dp;
if(f>) ans=ans+f;
if(ans>1e17) { ans%=p,flag=; }
/*当ans为负时,一定不会是两个以上的
负数之和,不会爆ll,若取过模,ans一定大于
ans1,用一个flag记录*/
}
if(flag)write(ans%p);
else{
if(ans1>ans) ans=ans1;
write(ans%p);
}
fwrite(ch,,now_w-ch,stdout); //快写
return ;
}

开O2 32ms ,大概是非打表提交的最优解

【洛谷P1982】小朋友的数字的更多相关文章

  1. 洛谷P1982 小朋友的数字

    题目传送门 这个题的题目有点长,我们先来分析一波. 首先,这个题目中提到了以下几个量 1.最直接的就是每个小盆友手上的数字,这是题目给你的 2.每个小盆友的特征值 题目中给的定义是:每个小朋友的特征值 ...

  2. 洛谷P1982 小朋友的数字——题解

    题目传送 简单地说,这题就是让我们求前i个数的最大子串和和最值. 对于最大子串和,我们可以设一个变量qian,表示以当前元素结尾的最大子串的子串和.若搜索完第i-1个小朋友,现在看到第i个小朋友时,若 ...

  3. [洛谷P3292] [SCOI2016]幸运数字

    洛谷题目链接:[SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城 ...

  4. 洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)

    洛谷题目传送门 90分WA第二个点的看过来! 简要介绍一下中国剩余定理 中国剩余定理,就是用来求解这样的问题: 假定以下出现数都是自然数,对于一个线性同余方程组(其中\(\forall i,j\in[ ...

  5. 洛谷P2501 bzoj1049 [HAOI2006]数字序列

    题目链接 bzoj 洛谷 题解 第一问: 假如 \(i < j\) 如果 \(j\)能从\(i\)转移过来 显然中间空隙必须足够 例如:\(50\) \(53\) \(53\) \(52\) 就 ...

  6. bzoj2154||洛谷P1829 Crash的数字表格&&JZPTAB && bzoj3309 DZY Loves Math

    bzoj2154||洛谷P1829 https://www.lydsy.com/JudgeOnline/problem.php?id=2154 https://www.luogu.org/proble ...

  7. 【dp】P1982 小朋友的数字

    有趣的细节题目 题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之 ...

  8. P1982 小朋友的数字

    题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个 小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋 友手上的数字之和的最大值. ...

  9. 洛谷P3292 [SCOI2016] 幸运数字 [线性基,倍增]

    题目传送门 幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的 ...

随机推荐

  1. [javaSE] java上传图片给PHP

    java通过http协议上传图片给php文件,对安卓上传图片给php接口的理解 java文件: import java.io.DataOutputStream; import java.io.File ...

  2. [android] 练习使用ListView(一)

    练习使用ListView,BaseAdapter,先展示文字的,再练习图片的 MainActivity.java package com.android.test; import android.ap ...

  3. Spring boot Mybatis 整合(注解版)

    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...

  4. Spring cloud ReadTimeout 问题解决

    今天使用Spring cloud @FeignClient 调用远程服务的时候,出现readTimeout问题,通过找资料解决方式如下 在Spring.properties 配置文件中添加如下属性解决 ...

  5. 第11章 Media Queries 与Responsive 设计

    Media Queries--媒体类型(一) 随着科学技术不断的向前发展,网页的浏览终端越来越多样化,用户可以通过:宽屏电视.台式电脑.笔记本电脑.平板电脑和智能手机来访问你的网站.尽管你无法保证一个 ...

  6. csharp:Optical Character Recognition

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  7. 51Nod1782 圣诞树

    传送门 我居然忘写题解啦!(记忆废) 总的来说这题就是道大数据结构……看我代码长度就知道了,真的是长得要死…… …… 这题的操作都是路径修改单点查询,因此可以树上差分,问题就变成了维护子树中的所有标记 ...

  8. Python基础-模块与包

    一.如何使用模块 上篇文章已经简单介绍了模块及模块的优点,这里着重整理一下模块的使用细节. 1. import 示例文件:spam.py,文件名spam.py,模块名spam #spam.py pri ...

  9. MongoDB 创建集合

    createCollection() 方法 MongoDB db.createCollection(name, options) 是用来创建集合. 语法: 基本的 createCollection() ...

  10. hdu 3367 Pseudoforest (最大生成树 最多存在一个环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3367 Pseudoforest Time Limit: 10000/5000 MS (Java/Oth ...