hdu 1003 递归(DP)

来源:互联网 发布:linux排名 编辑:程序博客网 时间:2024/05/14 22:40
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1003
思路是用ret记录当前最大字段和,在主函数中调用max_sum()用star和end来标记当前最大字段和所对应的起始位置,将调用函数的三个参数ret,star,end返回输出即可。
#include<iostream> 
const int MAX=100005;
using namespace std; 
int max_sum(int n,int *list,int&ret,int &star,int &end
{    
        int sum=0; 
      int s,i; 
   for(ret=list[star=end=s=i=0];i<n;i++,s=(sum>0?s:i) )
     if((sum=(sum>0?sum:0)+list[i])>ret
       {ret=sum,star=s,end=i;} 
 return true;
 } 
int main() 
 { 
    int list[MAX];
    int begin,finish,num;
    int count,n,t; 
    cin>>count; 
     t=0; 
    while(count--)
     { 
      cin>>n;
      for(int i=0;i<n;i++)
       cin>>list[i]; 
      int yes=max_sum(n,list,num,begin,finish);
    if(yes) 
     cout<<"Case "<<++t<<":\n"<<num<<" "<<begin+1<<" "<<finish+1<<endl;             if(count>=1)                 cout<<endl;    }
    return 0
}

0 0
原创粉丝点击