看过杭电课件后做的第一道动态规划题

附上代码如下:


#include<stdio.h>
int main()
{
 int t,n,num,sum,max,begin,end,temp,count,i;
 scanf("%d",&t);
 for(count=1;count<=t;count++)
 {
  scanf("%d",&n);
  sum=0;temp=1;end=1;max=-1001;
  for(i=1;i<=n;i++)
  {
   scanf("%d",&num);
   sum+=num;
   if(sum<num)
   {
    temp=i;sum=num;
   }
   if(sum>max)
   {
    max=sum;
    begin=temp;
    end=i;
   }
  
  }
  printf("Case %d:\n%d %d %d\n",count,max,begin,end);
  if(count!=t)
   printf("\n");
 }
 return 0;

}

 

 

做这道题真郁闷,把两个if语句的的顺序搞错了,就一直wrong answer,不下五次吧。。。。放这种低级错误唉。。。

后来看了另外一个人的代码,调试过,才发现自己错在那个地方。

不管怎么样,算是做了一道了。dp的一个开始吧,虽然不是一个好的开始,以后顺利点就好了,细心细心,呵呵。

附上那个我参考的代码(谢谢了)

#include <iostream>
using namespace std;

int
main()
{

    int
T,N,num,startP,endP;
    cin>>T;

    for
(int k=0;k<T;k++)
    {

            cin>>N;

            int
max=-1001,sum=0,temp=1;
            for
(int i=0;i<N;i++)
            {

                            cin>>num;
                            sum+=num;

                            if
(sum>max)
                            {

                                      max=sum;
                                      startP=temp;
                                      endP=i+1
;
                            }

                            if
(sum<0)
                            {

                                    sum=0;
                                    temp=i+2
;
                            }
            }

            cout<<"Case "<<k+1<<":"<<endl<<max<<" "<<startP<<" "<<endP<<endl;

            if
(k!=T-1) cout<<endl;
   
    }
}

posted on 2008-10-29 23:32  pandy  阅读(1700)  评论(4编辑  收藏  举报