hdu 4223 Dynamic Programming?

来源:互联网 发布:使人变老的软件 编辑:程序博客网 时间:2024/05/18 01:51

题目

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

分析

这个没有什么好的思路,就是按照题目要求一段一段的,把每种可能都计算了(即,在每一个起点的位置上按照步长进行分段来求值),然后求最小值,步长取值范围[1,N-1]。

复杂度

O(N*N)

涉及内容

算法:动态规划

感想

如果没有什么好的思路,就用普通思路先做出来,然后在想办法优化就好。

代码

#include <cstdio>#include <cstdlib>#define abs(a) ((a)>=0?(a):-(a))const int nMax=1010;const int INF=0x7fffffff;int T,N;int e[nMax];int cmp(const void *a,const void *b){    int *pa=(int *)a;    int *pb=(int *)b;    return *pa-*pb;}int main(){    //freopen("f://data.in","r",stdin);    scanf("%d",&T);    for(int cas=1;cas<=T;cas++)    {        scanf("%d",&N);        e[0]=0;        for(int i=1;i<=N;i++)        {            int a;            scanf("%d",&a);            e[i]=e[i-1]+a;        }        qsort(e+1,N,sizeof(e[0]),cmp);        int min=INF;        for(int i=1;i<=N;i++)        {            if(abs(e[i])<min)                min=abs(e[i]);            if(abs(e[i]-e[i-1])<min)                min=abs(e[i]-e[i-1]);        }        printf("Case %d: %d\n",cas,min);    }    return 0;}


参考文献


原创粉丝点击