zoukankan      html  css  js  c++  java
  • hdu 1003 Max Sum(动态规划)

    解题思路:

    本题在给定的集合中找到最大的子集合【子集合:集合的元素的总和,是所有子集合中的最大解。】

    结果输出: 最大的子集合的所有元素的和,子集合在集合中的范围区间.

    依次对元素相加,存到一个 sum 中,同时ans=sum;定义左右边界 left,right;临时左边界ll=1;

    如果sum>ans,则ans=sum; 左边界 left=tem; right=i+1;

    如果sum<0,则sum=0; tem=i+2;

    Ac code:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     int t,a,sum,ans,l,r,x,ll;
     6     scanf("%d",&t);
     7     for(int k=1; k<=t; k++)
     8     {
     9         sum=0;ans=-10000;ll=1;
    10         scanf("%d",&x);
    11         for(int i=0; i<x; i++)
    12         {
    13             scanf("%d",&a);sum+=a;
    14             if(sum>ans)
    15             {ans=sum;l=ll;r=i+1;}
    16             if(sum<0)
    17             {sum=0;ll=i+2;}
    18         }
    19         printf("Case %d:
    %d %d %d
    ",k,ans,l,r);
    20         if(k!=t)printf("
    ");
    21     }
    22     return 0;
    23 }

     简单DP: 2017.03.29

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<string.h>
     4 using namespace std;
     5 #define N 100005
     6 int dp[N];
     7 int a[N];
     8 int main()
     9 {
    10     int t;
    11     while(scanf("%d",&t)!=EOF)
    12     {
    13         int c=1,T=t;
    14         while(t--)
    15         {
    16             memset(dp,0,N);
    17             int n;
    18             scanf("%d",&n);
    19             for(int i=1; i<=n; i++)
    20                 scanf("%d",&a[i]);
    21             dp[1]=a[1];
    22             for(int j=2; j<=n; j++)
    23                 dp[j]=max(dp[j-1]+a[j],a[j]);
    24 
    25             int mx=-999999999;
    26             int st=0,en=0;
    27             for(int i=1; i<=n; i++)
    28                 if(mx<dp[i])
    29                 {
    30                     mx=dp[i];
    31                     en=i;
    32                 }
    33             st=en;
    34             int sum=0;
    35             for(int i=en; i>=1; i--)
    36             {
    37                 sum+=a[i];
    38                 if(sum==mx)
    39                     st=i;
    40             }
    41             printf("Case %d:
    %d %d %d
    ",c,mx,st,en);
    42             if(c!=T)printf("
    ");
    43             c+=1;
    44         }
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    最近有点不顺心
    存储过程传入datatable
    mvc下添加 EntityFramework的引用
    vmstat,iostat,sar命令详解
    oracle job interval·相关事例
    dbms_job和dbmsi_job
    数据库hang住 处理过程
    Library cache lock 故障解决一例
    dbms_job涉及到的知识点
    V$SESSION_LONGOPS
  • 原文地址:https://www.cnblogs.com/A--Q/p/5738825.html
Copyright © 2011-2022 走看看