看过杭电课件后做的第一道动态规划题
附上代码如下:
#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;
}
}