hdu 4223 Dynamic Programming

http://blog.ac521.org/?p=206

题意:给你一个序列,求一个连续子序列,使这个连续子序列的和的绝对值最少,输出最小是多少。

先求出每一个的前n项和,然后排序,找差值最小的就可以了。

 

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int a[1000010];
int main()
{
    int i,j,k,l,m,n,max,min;
    int T=1;
    scanf("%d",&n);
    while(n--)
    {
        memset(a,0,sizeof(a));
        scanf("%d",&m);
        a[0]=0;
        for(i=1;i<=m;i++)
        {
            scanf("%d",&l);
            a[i]=a[i-1]+l;
        }
        sort(a,a+m+1);
        max=a[m]-a[0];
        for(i=0,min=10000000;i<m;i++)
        {
            k=a[i+1]-a[i];
            if(min>k)
            min=k;
        }
        printf("Case %d: %d\n",T++,min);
    }
 
}

 

posted @ 2012-04-19 11:23  Muse牧马  Views(153)  Comments(0Edit  收藏  举报