01.17F

01.17f
给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …,
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
Input
测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( < 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
Sample Input
6
-2 11 -4 13 -5 -2
10
-10 1 2 3 4 -5 -23 3 7 -21
6
5 -8 3 2 5 0
1
10
3
-1 -5 -2
3
-1 0 -2
0
Sample Output
20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0

Huge input, scanf is recommended.
Hint
Hint
问题链接:https://vjudge.net/contest/277768#problem/F
问题代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
 
int a[10005],dp[10005];
 
int main()
{
    int n,i,j,MAX,cnt;
    while(~scanf("%d",&n),n)
    {
        for(i = 0; i<n; i++)
            scanf("%d",&a[i]);
        int left,right,flag;
        MAX = a[0];
        cnt = 0;
        left = right = a[0];
        for(i = 0; i<n; i++)
        {
            if(cnt<0)
            {
                cnt = a[i];
                flag = a[i];
            }
            else
                cnt+=a[i];
            if(cnt>MAX)
            {
                MAX = cnt;
                left = flag;
                right = a[i];
            }
        }
        if(MAX<0)
        {
            printf("0 %d %d\n",a[0],a[n-1]);
            continue;
        }
        printf("%d %d %d\n",MAX,left,right);
    }
 
 
    return 0;
}


--------------------- 
作者:键盘上的舞者 
来源:CSDN 
原文:https://blog.csdn.net/libin56842/article/details/10328881 
版权声明:本文为博主原创文章,转载请附上博文链接!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你想要查询Linux系统CPU状态时,可以使用top命令。Top命令可以显示系统当前的进程信息以及资源占用情况,其包括CPU占用情况。 以下是一个简单的脚本,使用top命令查询CPU状态并输出到终端: ``` #!/bin/bash while true do clear top -b -n 1 | head -n 20 sleep 1 done ``` 这个脚本会循环执行top命令,每秒钟更新一次CPU状态信息。执行脚本后,你可以在终端上看到类似下面的输出: ``` top - 12:45:15 up 5 min, 1 user, load average: 0.74, 0.47, 0.24 Tasks: 211 total, 1 running, 210 sleeping, 0 stopped, 0 zombie %Cpu(s): 25.3 us, 4.3 sy, 0.0 ni, 70.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 2048000 total, 151664 free, 272236 used, 1629100 buff/cache KiB Swap: 1048572 total, 1048572 free, 0 used. 1496540 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4054 user 20 0 112548 5764 3208 R 16.7 0.3 0:00.02 top 1 root 20 0 225280 6356 3876 S 0.0 0.3 0:01.17 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+ 7 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root RT 0 0 0 0 S 0.0 0.0 0:00.00 rcu_sched 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 lru-add-dr+ 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns ``` 其,%Cpu(s)行显示了CPU的占用情况,包括用户态进程占用时间(us)、系统态进程占用时间(sy)、空闲时间(id)等。PID、COMMAND等列则显示了当前正在运行的进程信息。 你可以按q键退出top命令并停止脚本的执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值