hdu 1422 DP

来源:互联网 发布:软件自动化测试ppt 编辑:程序博客网 时间:2024/06/01 08:35

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

       自我感觉本题算是一道有点技术含量的DP题,思路同To the max那题很类似,用一个一维数组存储提供的生活费和所需的花费,可惜当时我没想到,虽然也用了DP思想,但是用了两个数组存储,又用了结构体,比较麻烦,最后程序写的老长,自己都快写晕了,交上自然也就免不了wa的厄运了!

AC代码:

 

 

#include<stdio.h>#define N 100010int a[N];   //记录第i个城市的供需情况int main(){ int n,i,j,max,sum,cns,w,l,flag; while(scanf("%d",&n)!=EOF) {  for(i=0;i<n;i++)  {   scanf("%d%d",&w,&l);   a[i]=w-l;  }  flag=1;i=max=0;  while(flag)  {   sum=0;   while(a[i]<0)   {    i++;    if(i==n)   //如果从第i到第n个城市都是供不应求,则起始位置已遍历一遍,不能继续参观    {           //即直接输出当前max的值;     flag=0;        goto A;    }   }   j=i;       do{      //从当前城市开始累加,看最多能到达的城市数    sum+=a[j];    if(sum<0)      break;    j++;    if(j==n)    {       //如果最后一个城市被算入,说明已经累加到最后一个城市     flag=0;   //此do-while循环结束时,j已回到i的前面,则flag置0,下一次结束while循环     j=0;  //从第一个继续累加    }   }while(j!=i);  //j==i说明循环一周,即所有城市都能够参观   cns=(j+n-i)%n;   if(cns==0)    cns=n;   if(cns>max)    max=cns;   i=j;  //继续从结束点往后累加,计算能参观的最大城市数  }A:printf("%d\n",max); } return 0;}


 

0 0