zoukankan      html  css  js  c++  java
  • Maximum Subsequence Sum【PAT 1007题】简单的动态规划

    题目链接:http://pat.zju.edu.cn/contests/pat-practise/1007

    最大连续子序列和,动态规划的简单题,其实这个题不用动态规划的方法去理解算法也很简单,用sum存储遍历途中遇到的当前最大和,用temp存储当前处理的子序列和,如果temp>=0,则访问a[i]时,temp += a[i],但若temp是小于0的,则加上a[i]以后定然小于a[i],所以直接把temp更新为a[i],访问一个新的子序列,如果temp大于sum,则更新sum,以上就是解题思路,由于题目中要求求出最大和的同时,记录下相应子序列的首尾元素值,若序列全是负数,则最大和定义为0,首尾定义为整个序列的首尾值,所以程序中需要增加一些变量以存储以上信息.

     1 #include <stdio.h>
    2 #include <stdlib.h>
    3
    4 int main()
    5 {
    6 int k;
    7 int *data;
    8 int i;
    9
    10 int start, end, sum, temp, tempi, tempj;
    11
    12 while(scanf("%d", &k) != EOF)
    13 {
    14 data = (int *)malloc(k * sizeof(int));
    15 for(i = 0; i < k; i ++)
    16 {
    17 scanf("%d", &data[i]);
    18 }
    19 sum = 0;
    20 start = 0;
    21 end = k - 1;
    22 temp = 0;
    23 tempi = 0;
    24 tempj = 0;
    25 for(i = 0; i < k; i ++)
    26 {
    27 if(temp >= 0)
    28 {
    29 temp += data[i];
    30 tempj = i;
    31 }
    32 else
    33 {
    34 temp = data[i];
    35 tempi = i;
    36 tempj = i;
    37 }
    38 if(temp > sum || (temp == 0 && end == k - 1))//temp确实比sum大, 或者, sum依然是初始状态(end == k-1即表示)而且temp==0, 需要替换
    39 {
    40 sum = temp;
    41 start = tempi;
    42 end = tempj;
    43 }
    44 }
    45 printf("%d %d %d\n", sum, data[start], data[end]);
    46 }
    47 return 0;
    48 }



  • 相关阅读:
    Nginx配置文件的路径
    有关Tomcat 8.5版本文件上传后无权限访问的问题
    常见HTTP状态码列表
    服务器BMC(带外)
    CDN问题
    PECE
    linux系统概述
    干货--整蛊你的舍友
    arp请求与回复
    huawei oceanstor
  • 原文地址:https://www.cnblogs.com/Rafy/p/2403091.html
Copyright © 2011-2022 走看看