• 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;

    }

  • 相关阅读:
    八数码(BFS)
    食物链(并查集)
    最大异或对(Trie)
    解决espeak编译的一些问题
    AcWing 3779. 相等的和
    AcWing 3775. 数组补全(环图)
    AcWing 3728. 城市通电(最小生成树)
    AcWing 3727. 乘方相乘(进位制)
    tarjan
    LC刷题简要记录
  • 原文地址:https://www.cnblogs.com/yuelingzhi/p/2125544.html
Copyright © 2020-2023  润新知