zoukankan      html  css  js  c++  java
  • hdu 1231 最大连续子序列

    http://acm.hdu.edu.cn/showproblem.php?pid=1231

    这道题目还是简单的DP,一开始不懂做,看了看解题报告,觉得有个思想特别好,因为当sum>0时sum加上当前值a[i]肯定比a[i]要大,而Sum<0时肯定要小,所以sum<0时,sum=a[i]。然后再利用max找出最大的和,并且用x,y标记始末位置,这里很巧妙的就可以不用处理0和全是负数的情况了,只有全是负数,max猜可能是负数,当max=0的时候,情况也包括在里面了,wa一次因为数组开小了,把10000看成1000了。。。。

    代码如下:

    #include <stdio.h>

    #include <string.h>

    #include <stdlib.h>

    int a[102][102];

    void dp(int n)

    {

         if(n==0)  return ;

         for(int j=n;j>=0;--j)

         {

                 if(a[n][j]+a[n-1][j-1]<a[n-1][j-1]+a[n][j-1])

                       a[n-1][j-1]=a[n-1][j-1]+a[n][j-1];

                       else

                       a[n-1][j-1]=a[n][j]+a[n-1][j-1];

         }

         dp(n-1);

    }

    int main()

    {

        int t,m;

        scanf("%d",&t);

        while(t--)

        {

                  scanf("%d",&m);

                  for(int i=0;i<m;++i)

                  for(int j=0;j<=i;++j)

                  scanf("%d",&a[i][j]);

                  dp(m);

                  printf("%d\n",a[0][0]);

                  

        }

        system("pause");

        return 0;

    }

  • 相关阅读:
    每周总结(第九周)
    每周总结(第七周)
    每周总结(第六周)
    成功案例和第五周总结
    结对编程和第四周总结
    每周总结(第三周)
    node.js爬取图片
    机器学习15 手写数字识别-小数据集
    机器学习13 14 深度学习-卷积
    机器学习12 垃圾邮件分类2(13)
  • 原文地址:https://www.cnblogs.com/yuelingzhi/p/2125544.html
Copyright © 2011-2022 走看看