文章
3
粉丝
0
获赞
23
访问
696
#include<bits/stdc++.h>
using namespace std;
int main(){
// 定义dp数组:dp[i]表示以第i个元素结尾的最大连续子序列和
int dp[10000];
// 定义a数组:存储输入的k个整数序列
int a[10000];
// k:输入的序列长度
int k;
// 循环读取测试用例,直到输入k=0时结束
while(cin>>k){
// 输入k=0,终止循环(题目要求)
if(k==0) break;
// flag标记:判断序列中是否有非负数(0或正数),初始为0(无)
int flag=0;
// 读取k个整数到数组a中
for(int i=0;i<k;i++){
cin>>a[i];
// 只要有一个元素>=0,就将flag置为1(表示不是全负数)
if(a[i]>=0) flag=1;
}
// 处理全负数的情况(flag=0)
if(flag == 0){
// 按题目要求:最大和为0,输出整个序列的首尾元素,换行保证格式正确
printf("0 %d %d\n",a[0],a[k-1]);
// 跳过后续逻辑,直接处理下一个测试用例
continue;
}
// 动态规划初始化:以第0个元素结尾的最大子序列和就是它本身
dp[0]=a[0];
// maxx:记录全局最大子序列和,初始化为第一个元素的dp值
int maxx=dp[0];
// start_num:最终输出的最大子序列的起始下标,初始化为0
...
登录后发布评论
暂无评论,来抢沙发