Codeforces Round #750 (Div. 2) E. Pchelyonok and Segments
题目大意:
给一个序列,可以在这个序列中从左至右选若干个段,第i段的长度为i,对于任意的段i,段内元素和S[i]<S[i+1],求在该序列中最多可以选出几段。
思路:设dp[i][j]为从Ai个到第An个数中可以取j段满足条件时能达到的第一段sum的最大值
我们从后往前dp,一开始dp[N][1]=A[N],其他初始为0,当j=1时,显然有,dp[i][1]=max(A[i],dp[i+1][1])。
对于其他情况,设sum=A[i]+A[i+1]+...+A[i+j-1],如果dp[i+j][j-1] > 0 且 sum < dp[i+j][j-1](为了满足段的和必须递增,以及从A[i+j]开始取可以取j-1段),那么dp[i][j]=max(dp[i+1][j],sum),否则,dp[i][j]=dp[i+1][j]。
最后遍历所有dp[1][j],dp[1][j] > 0时即第一段和>0,说明可以取j段,最大的使dp[1][j] > 0的j即为答案。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int>PII;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#pragma warning(disable:4996)
const int maxn = 101010;
LL T, N, A[maxn], S[maxn];
LL dp[maxn][510];//从Ai个到第An个数中可以取j段满足条件时能达到的第一段sum的最大值
void solve()
{
for (int i = 1; i <= N; i++)
S[i] = S[i - 1] + A[i];
for (int i = 0; i <= N + 1000; i++)
{
for (int j = 0; j <= int(sqrt((N + 1) * 2)); j++)
dp[i][j] = -INF;
}
int ans = 1;
dp[N][1] = A[N];
for (int i = N - 1; i > 0; i--)
{
dp[i][1] = max(dp[i + 1][1], A[i]);
for (int j = 2; j <= int(sqrt((N + 1)*2)); j++)
{
dp[i][j] = dp[i + 1][j];
LL sum = S[i + j - 1] - S[i - 1];
if (dp[i + j][j - 1] > 0 && sum < dp[i + j][j - 1])
dp[i][j] = max(dp[i][j], sum);
// cout << i << "-" << j << ":::::" << dp[i][j] << endl;
}
}
for (int j = 2; j <= int(sqrt((N + 1) * 2)); j++)
{
if (dp[1][j] > 0)
ans = j;
}
cout << ans << endl;
}
int main()
{
IOS;
cin >> T;
while (T--)
{
cin >> N;
for (int i = 1; i <= N; i++)
cin >> A[i];
solve();
}
return 0;
}
Codeforces Round #750 (Div. 2) E. Pchelyonok and Segments的更多相关文章
- Codeforces Round #750 (Div. 2)
Codeforces Round #750 (Div. 2) A. Luntik and Concerts 思路分析: 首先我们可以肯定的是a,b,c都大于等于1,所以我们先让它们自己抵消自己,最后a ...
- Codeforces Round #337 (Div. 2) D. Vika and Segments 线段树扫描线
D. Vika and Segments 题目连接: http://www.codeforces.com/contest/610/problem/D Description Vika has an i ...
- Codeforces Round #337 (Div. 2) D. Vika and Segments (线段树+扫描线+离散化)
题目链接:http://codeforces.com/contest/610/problem/D 就是给你宽度为1的n个线段,然你求总共有多少单位的长度. 相当于用线段树求面积并,只不过宽为1,注意y ...
- Codeforces Round #524 (Div. 2) F. Katya and Segments Sets(主席树)
https://codeforces.com/contest/1080/problem/F 题意 有k个区间,区间的种类有n种,有m个询问(n,m<=1e5,k<=3e5),每次询问a,b ...
- Codeforces Round #523 (Div. 2) F. Katya and Segments Sets (交互题+思维)
https://codeforces.com/contest/1061/problem/F 题意 假设存在一颗完全k叉树(n<=1e5),允许你进行最多(n*60)次询问,然后输出这棵树的根,每 ...
- Codeforces Round #245 (Div. 2) A. Points and Segments (easy) 贪心
A. Points and Segments (easy) Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...
- Codeforces Round #535 (Div. 3) E2. Array and Segments (Hard version) 【区间更新 线段树】
传送门:http://codeforces.com/contest/1108/problem/E2 E2. Array and Segments (Hard version) time limit p ...
- CodeForces -Codeforces Round #496 (Div. 3) E2. Median on Segments (General Case Edition)
参考:http://www.cnblogs.com/widsom/p/9290269.html 传送门:http://codeforces.com/contest/1005/problem/E2 题意 ...
- Codeforces Round #453 (Div. 1) 901C C. Bipartite Segments
题 http://codeforces.com/contest/901/problem/C codeforces 901C 解 首先因为图中没有偶数长度的环,所以: 1.图中的环长度全是奇数,也就是说 ...
随机推荐
- 开源免费的WordPress个人博客主题推荐
二次元动漫类个人主题 Sakura 功能强大,美观大气,二次元动漫专属 演示地址:https://2heng.xin/theme-sakura/ 开源地址:https://github.com/mas ...
- Open虚拟专用网络
目录 一:OpenVPN虚拟网络专用 1.简介: 2.OpenVPN的作用 3.远程访问VPN服务 4.OpenVPN两种类型的VPN体系结构 5.全面解析OpenVPN执行流程 6.Openvpn定 ...
- kubernetes之Pod水平自动伸缩(HPA)
https://k8smeetup.github.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/ Horizon ...
- 学习JAVAWEB第六天
# 今日内容: 1. JavaScript: 1. ECMAScript: 2. BOM: 3. DOM: 1. 事件 ## DOM简单学习:为了满足案例要求 * 功能:控制html文档的内容 * 获 ...
- 利用application在页面中显示访问次数
在jsp页面中实现. <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...
- 「JOI 2014 Final」飞天鼠
「JOI 2014 Final」飞天鼠 显然向上爬是没有必要的,除非会下降到地面以下,才提高到刚好为0. 到达一个点有两种情况:到达高度为0和不为0. 对于高度不为0的情况,显然花费的时间越少高度越高 ...
- 微信、QQ添加Universal Link
官方说明 1. Universal Links是什么 Universal Links(通用链接),是苹果在iOS9之后,提供的一种"可通过传统HTTP链接来跳转APP"的能力. 该 ...
- File常用的方法
import java.io.File; import java.io.IOException; /* 创建: createNewFile() 在指定位置创建一个空文件,成功就返回true,如果已存在 ...
- mocha_JavaScript单元测试框架
mocha mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行. 使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自 ...
- SQLServer、Mysql、Oracle 创建、删除用户和授予用户权限
SQLServer 1.创建用户 CREATE LOGIN [用户名称] WITH PASSWORD='用户密码', DEFAULT_DATABASE=[默认数据库名称], CHECK_EXPIRAT ...