传送

手疼qwq

翻译一下题面。就是说,给n个数,第i个数(包括第i个)以及之前的数构成的最大子段和是i的特征值,i以前(不包括i)的数中最大的分数j+特征值j是i的分数,求所有人中的最大分数。

(好吧翻译之后更看不懂了qwq)

这看起来像一个dp,还是两次dp

那我们就拿dp试试(太过蒟蒻不会写暴力)

对于特征值,我也是看了题解才知道这是个最大子段和问题

那我们看一下最大字段和怎么做

1.暴力(O(n^3))显然超时,不讨论

2.分治算法(我不会)

3.dp(补习完滚回来写博) (O(n)(最快的一种算法))

所有算法请走这里

这里我们简单的说一下dp求最大子段和

设dp[i]是以num[i]结尾的最大子段和(这个子段中一定包含num[i])

则dp[i]=max(num[i],dp[i-1]+num[i])

相当于说要么是之前的dp[i-1]再加上num[i]是以num[i]结尾的最大子段和,要么之前的不要了,选a[i]作为dp[i]

最终答案当然不是dp[n],因为num[n]不一定要在最大子段结尾。

最终答案是在所有的dp[i]中的最大值

于是就有了求t[i](特征值)的代码了

    long long maxn=-;
for(int i=;i<=n;i++)
{
dp1[i]=max(dp1[i-]+num[i],num[i]);
if(dp1[i]>maxn)maxn=dp1[i];
t[i]=maxn%p;//一个unbelievable的地方:中间不模会炸!!!(就算是小数据也会炸qwq)(未解之谜*1) }

接下来求分数

未解之谜2警告

我们设maxn为当前所有f[i](分数)中的最大值,那么maxn的转移方程:

maxn=max(maxn,f[i-1]+t[i-1])

f[i]=maxn

未解之谜2:

设f[i]为当前i的分数,则f[i]为之前的所有f[j](1<=j<i)中最大的一个,f[i]=max(f[i-1],f[i-1]+t[i-1])

但上面那个是不对的,这是为什么呢?我也不知道啊。

好了我们自动忽视上面的未解之谜2

如果maxn>ans,则ans=maxn%p(一定要在这里模,放在最后模会wa(未解之谜1))

所以我们就有了ac代码(%%%神仙ych)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
long long n,p,num[N],dp1[N],f[N],t[N],ans=-;
int main()
{
scanf("%lld%lld",&n,&p);
for(int i=;i<=n;i++)
scanf("%lld",&num[i]);
long long maxn=-;
for(int i=;i<=n;i++)
{
dp1[i]=max(dp1[i-]+num[i],num[i]);
if(dp1[i]>maxn)maxn=dp1[i];
t[i]=maxn%p; }
maxn=-;
f[]=t[];ans=f[];
for(int i=;i<=n;i++)
{
maxn=max(maxn,f[i-]+t[i-]);
f[i]=maxn;
if(maxn>ans)ans=maxn%p;
printf("%d %lld\n",i,f[i]);
}
cout<<ans;
}

综合两个未接之谜,数据可能有锅

我太菜了,找不到自己的锅

ps:如果能回答那两个未解之谜请评论,万谢qwq

P1982小朋友的数字的更多相关文章

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

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

  2. P1982 小朋友的数字

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

  3. 洛谷P1982 小朋友的数字

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

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

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

  5. 【洛谷P1982】小朋友的数字

    小朋友的数字 题目链接 题目翻译: 每个小朋友有一个数字,构成一个数字序列a1,a2…an 我们定义“特征值”fi为a1~ai中的最大连续子段和 再定义“分数”si为1~i-1中最大的(sj+fj), ...

  6. NOIP2013pj小朋友的数字[DP 最大子段和]

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

  7. 小朋友的数字(codevs 3293)

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

  8. <<小朋友的数字>>核心代码

    for(i=l;i<=n;i++) { a[i]=read(); t=t+a[i]; if (t>maxn) maxn=t if( t<0) t=0; b[i]=maxn; }

  9. 每周刷题记录--by noble_

    学习hzwer的博客. ----------------------------------------------------------------- 2017.10.3 主要是水题与傻逼dp: ...

随机推荐

  1. [Python3 练习] 007 简单的猜数字小游戏

    题目:简单的猜数字小游戏 (1) 描述 程序随机生成一个数字,玩家用键盘输入所猜数字,在规定次数内猜对为胜. (2) 要求 程序随机生成一个 1 到 100 的自然数 有 7 次机会去猜 机会用尽之前 ...

  2. PCB电路设计 altiumdesigner(项目软件总结)

    1.Altium designer 10在PCB里面复制粘贴,比CAD里面多一个动作,就是点击ctrl+C后,要左键点一下复制基点,比如某根线端点或者焊盘,再粘贴,就是基于刚才点的那个为基点粘贴了.2 ...

  3. Java之九九乘法表

    public class MultiplicationTable { public static void main(String[] args) { for(int i=1;i<=9;i++) ...

  4. 解决在data里面获取一个固定的img值

    正常情况下在data里面申明,在img标签里面通过 :src应用就行了,但是如果是直接申明引用是没效果的: html: <div class="logo"> <i ...

  5. 使用userAgent区分浏览器版本

    使用userAgent区分浏览器版本:https://blog.csdn.net/n447194252/article/details/76255489 JS根据userAgent值来判断浏览器的类型 ...

  6. 深入ArrayList看fast-fail机制

    fail-fast机制简介 什么是fail-fast fail-fast 机制是java集合(Collection)中的一种错误机制.它只能被用来检测错误,因为JDK并不保证fail-fast机制一定 ...

  7. Java Web项目使用图形验证码 — Kaptcha

    一.验证码介绍 生成的主要方式: 1.使用Java原生的方式,其中包含了Servlet.AWT.ImageIO的使用: 2.使用开源库,例如Jcaptcha.Kaptcha...: (各图形验证码开源 ...

  8. Scala本地安装

    一.下载 https://www.scala-lang.org/download/ 这里我选择Scala2.10.4版本 二.安装 安装比较简单  和jdk类似 点击一路安装: 选择自己的路径 完成 ...

  9. linux 根目录扩容

    之前搭建了一个CentOS(7.0, x64)的VM,一直没留意它的硬盘空间.昨天,系统突然弹出警示,说 根目录 空间不足了. 这样的话,就只能给它增加空间呗. 我自己其实已经增加过硬盘空间了,但是为 ...

  10. Solr的学习使用之(八)facet实战

    以下为统计media的数量功能,通过solrj,采用了facet方法,类似于sql的分组group by查询:这边的代码只是获取总媒体数量,其实他还有其他功能,去循环solrList的话,可以获取各个 ...