hdu 1422 DP
2015-09-02 15:30
169 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1422
自我感觉本题算是一道有点技术含量的DP题,思路同To the max那题很类似,用一个一维数组存储提供的生活费和所需的花费,可惜当时我没想到,虽然也用了DP思想,但是用了两个数组存储,又用了结构体,比较麻烦,最后程序写的老长,自己都快写晕了,交上自然也就免不了wa的厄运了!
AC代码:
自我感觉本题算是一道有点技术含量的DP题,思路同To the max那题很类似,用一个一维数组存储提供的生活费和所需的花费,可惜当时我没想到,虽然也用了DP思想,但是用了两个数组存储,又用了结构体,比较麻烦,最后程序写的老长,自己都快写晕了,交上自然也就免不了wa的厄运了!
AC代码:
#include<stdio.h> #define N 100010 int a ; //记录第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; }
相关文章推荐
- hdu 1098 多项式整除问题
- ZOJ 1318 (第k个序列,简单数学题)
- 俗话说。。俗话又说。。
- hdu 3469 (tju 3552) Catching the Thief 博弈 数学题
- hdu 3471 (tju 3554) England vs Germany (计算几何)
- 混合图的欧拉回路
- hdu3472 (tju3555) HS BDC (混合图的欧拉回路)
- KMP算法详解
- 求单源最短路的SPFA算法
- 总结_两周学习情况简谈
- 总结_队友博客集
- 分类规整数据,5分钟统计一笔数据
- MyEclipse 关闭debug
- JSP技术详解
- 二人小组
- js中正则表达式的模式匹配
- sqlserver如何查询sql语句占用内存多少
- C语言中返回错误信息的相关函数用法总结
- SDUTOJ----3302效率至上;
- HTTP协议之http状态码详解