传送

手疼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. hdu-2255.奔小康赚大钱(最大权二分匹配)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  2. Lost Cows POJ 2182 思维+巧法

    Lost Cows POJ 2182 思维 题意 是说有n头牛,它们身高不一但是排成了一队,从左到右编号为1到n,现在告诉你从第二号开始前面的那些牛中身高小于它的个数,一共有n-1个数.然后求出它们按 ...

  3. SCUT - 11 - 被钦定的选手 - 质因数分解

    https://scut.online/p/11 T了好多次,还想用mutimap暴力分解每个数的质因数.后来记录每个数的最小质因子过了. #include <bits/stdc++.h> ...

  4. Linux mint启用内核转储

    1.查看当前是否启动了内核转储: star@sky:~$ ulimit -c unlimited 2.如果上面显示为0,即没有开启,那么,直接执行 ulimit -c unlimited 就好了. 3 ...

  5. 搜索---BFS

    搜索   深度优先搜索和广度优先搜索广泛的应用于树和图中,但是他们的应用远不止于此. BFS   广度优先搜索一层一层地进行遍历,每层遍历都是以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点 ...

  6. Asp.net中GridView使用详解(很全,很经典)

    http://blog.csdn.net/hello_world_wusu/article/details/4052844 Asp.net中GridView使用详解 效果图参考:http://hi.b ...

  7. CentOS7搭建Hadoop2.8.0集群及基础操作与测试

    环境说明 示例环境 主机名 IP 角色 系统版本 数据目录 Hadoop版本 master 192.168.174.200 nameNode CentOS Linux release 7.4.1708 ...

  8. Nginx优化_压缩处理与内存缓存

    对页面进行压缩处理; 服务器内存缓存. 1.对页面进行压缩处理 [root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf http { ... gzip ...

  9. Redis复制实现原理

    摘要 我的前一篇文章<Redis 复制原理及特性>已经介绍了Redis复制相关特性,这篇文章主要在理解Redis复制相关源码的基础之上介绍Redis复制的实现原理. Redis复制实现原理 ...

  10. 【Java学习笔记】线程安全的单例模式及双重检查锁—个人理解

    搬以前写的博客[2014-12-30 16:04] 在web应用中服务器面临的是大量的访问请求,免不了多线程程序,但是有时候,我们希望在多线程应用中的某一个类只能新建一个对象的时候,就会遇到问题. 首 ...