题解 | #E. Pchelyonok and Segments#

E. Pchelyonok and Segments

题意

给定长度为nn的数组,要求将数组分成KK段,每段连续,并且对于段iii+1i+1,段ii的长度要比段i+1i+111, 并且段ii的段内元素和要比i+1i+1段的小.求最大的KK 首先将数组反向,问题就变成了求长度递增的KK段,区间和递减。

得到状态表示dp[i][j]dp[i][j]为前i个元素中,最后一段长度为jj的最大末尾段和。

有状态转移方程:

dp[i][j]=dp[i1][j]dp[i][j] = dp[i-1][j]

ij>=1i - j >= 1ij+1ja[i]<dp[ij][j1]\sum_{i-j+1}^{j}a[i]<dp[i-j][j-1],有dp[i][j]=max(dp[i][j],ij+1ja[i])dp[i][j] = max(dp[i][j], \sum_{i-j+1}^{j}a[i])

这里需要十分注意边界条件

dp[0][i],i[1,M]dp[0][i], i \in [1, M]代表空集里面最后一段长度是jj的方案中结尾段的最大值,显然不存在,不可以转移到任何状态,设为inf-inf

dp[i][0].,i[1,N]dp[i][0]. , i \in [1, N]代表前ii个里面选0个,任意选11的状态都可以从其转移过来,应该设为可以转移的边界,故设为+inf+inf

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 5, M = 450;
#define inf 0x3f3f3f3f3f3f3f3f
ll f[N][M], a[N];
void solve() {
    int n; cin >> n;
    for(int i = 1; i <= n; i ++) cin >> a[i];
    reverse(a + 1, a + 1 + n);
    for(int i = 1; i <= n; i ++) a[i] += a[i - 1];
    for(int i = 1; i < M; i ++) f[0][i] = -inf;
    for(int i = 0; i <= n; i ++) f[i][0] = inf;
    for(int k = 1; k < M; k ++) {
        for(int i = 1; i <= n; i ++) {
            f[i][k] = f[i - 1][k];
            if(i - k >= 0) {
                if(a[i] - a[i - k] < f[i - k][k - 1])
                    f[i][k] = max(f[i][k], a[i] - a[i - k]);
            }
        }
    }
    int ans = 0;
    for(int i = 1; i < M; i ++) if(f[n][i] > 0) ans = i;
    cout << ans << endl;
}
int main() {
    int t; cin >> t;
    while(t --) {
        solve();
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 12:31
以前小时候我最痛恨出轨、偷情的人,无论男女,为什么会出轨?现在我成了自己最讨厌的人,没想到分享的东西在牛客会被这么多人看,大家的评价都很中肯,我也认同,想过一一回复,但我还是收声了,我想我应该说说这件事,这件事一直压在我心里,是个很大的心结,上面说了人为什么出轨,我大概能明白了。我们大一下半年开始恋爱,开始恋爱,我给出了我铭记3年的承诺,我对她好一辈子,我永远不会背叛,我责任心太重,我觉得跟了我,我就要照顾她一辈子,我们在一起3年我都没有碰过她,她说往东我就往东,她说什么我做什么,她要我干什么,我就干什么!在学校很美好,中途也出过一些小插曲,比如男闺蜜、男闺蜜2号等等等。但我都强迫她改掉了,我...
牛客刘北:两个缺爱的人是没有办法好好在一起的,但世界上哪有什么是非对错?你后悔你们在一起了,但是刚刚在一起的美好也是真的呀,因为其他人的出现,你开始想要了最开始的自己,你的确对不起自己,21岁的你望高物远,你完全可以不谈恋爱,去过你想要的生活,你向往自由,在一起之后,你要想的不是一个人,而是两个人,你不是变心了,就像你说的,你受够了,你不想包容了,冷静几天是你最优的选择,爱人先爱己。
社会教会你的第一课
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 15:37
点赞 评论 收藏
分享
07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务