小朋友的数字

题目链接

题目翻译:

每个小朋友有一个数字,构成一个数字序列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 ,大概是非打表提交的最优解

最新文章

  1. [DataBase] MongoDB (7) MongoDB 索引
  2. iOS_UIImage_jpg&lt;--&gt;png转换
  3. scrollTo 和 scrollBy
  4. BZOJ4118 : [Wf2015]Window Manager
  5. 兼容的firstChild,lastChild,nextSibling,previousSibling写法
  6. c# base关键的理解
  7. Linux(9.14-9.20)学习笔记
  8. appium +python api 新手
  9. A Tour of Go For continued
  10. 使用 asp.net mv4开发企业级办公OA
  11. perl 当前包会覆盖父类的同名方法
  12. SQLSERVER 数据库性能的的基本 MVC + EF + Bootstrap 2 权限管理
  13. IOS应用的国际化
  14. Mysql密码忘记后如何重设密码
  15. Oracle基础知识点——Oracle服务端和客户端
  16. 使用awk和sed获取文件奇偶数行的方法总结
  17. kafka-producer kerberos 原理和配置
  18. 20175227张雪莹 2018-2019-2 《Java程序设计》第三周学习总结
  19. ON 子句和 WHERE 子句的不同
  20. 新建react项目

热门文章

  1. requset获取post提交的请求参数
  2. java web 之Session
  3. CSS的BFC和hasLayout及其应用场景
  4. 基于Vue的WebApp项目开发(二)
  5. silverlight generic.xaml 包含中文 编译错误的问题
  6. git internal for computer scientists
  7. SQL Server -&gt;&gt; SQL Server 2016新特性之 -- AlwaysOn的增强改进
  8. SQL Server -&gt;&gt; FIRST_VALUE和LAST_VALUE函数
  9. MySQL5.7二进制安装
  10. js 获取URL中参数