hdu_1003
来源:互联网 发布:windows php扩展下载 编辑:程序博客网 时间:2024/05/22 11:37
算法与分析 第二章 for(i=0;i<n;i++){ nowsum+=a[i]; if(nowsum>max) max=nowsum; else if(nowsum<0) nowsum=0;}
上面代码适用于 max一定为正值的情况。
而hdu1003 是可以出现负值的,所以当nowsum<0时 不能直接赋值为0。
#include <stdio.h>int t;int a[100002];int main(){ scanf("%d",&t); int t1=1; while(t1<=t){ int n,i,j; scanf("%d",&n); a[0]=0; int maxn,maxi,maxj,nowsum=0; i=1; maxn=-1000*100000-1; //可以出现负值 for(j=1;j<=n;j++){ scanf("%d",&a[j]); if(nowsum<0) nowsum=a[j],i=j; else { nowsum+=a[j]; } if(nowsum>maxn){ maxn=nowsum; maxj=j; maxi=i; } } if(t1!=1) printf("\n"); printf("Case %d:\n",t1++); printf("%d %d %d\n",maxn,maxi,maxj); }}
我们可以分类讨论 一类是max大于0,可以用最上面的代码,一类是max小于0,也很容易得到
#include <stdio.h>int t;int a[100002];int main(){ scanf("%d",&t); int t1=1; while(t1<=t){ int n,i,j; scanf("%d",&n); a[0]=0; int maxn,maxi,maxj,nowsum=0; i=1; maxn=-1000*100000-1; //可以出现负值 //最大值是负的 int maxnn=maxn,maxnni; for(j=1;j<=n;j++){ scanf("%d",&a[j]); if(a[j]>maxnn) maxnn=a[j],maxnni=j; nowsum+=a[j]; if(nowsum<0) nowsum=0,i=j+1; else if(nowsum>maxn){ maxn=nowsum; maxj=j; maxi=i; } } if(t1!=1) printf("\n"); printf("Case %d:\n",t1++); if(maxn>0) printf("%d %d %d\n",maxn,maxi,maxj); else printf("%d %d %d\n",maxnn,maxnni,maxnni); }}
阅读全文
0 0
- HDU_1003
- HDU_1003
- hdu_1003
- HDU_1003 Max Sum
- HDU_1003 MAX SUM
- HDU_1003 Max Sum
- HDU_1003 Max Sum
- 其他函数使用前面函数的结果作为参数,定义局部变量
- linux学习笔记(文件以及树形结构)
- 搜狐研究院 求二叉树最大叶子节点到最小叶子节点的距离
- 01背包问题-动态规划
- JAVA_Day_05(方法 数组)
- hdu_1003
- HBCTF——WriteUp&&涨姿势(4)
- Tomcat中JVM内存溢出及合理配置
- JS中设置window.location.href跳转无效
- 安卓操作系统的历史
- NASA合作航天公司CEO:地球上有外星人
- 2017计蒜客第五场比赛 UCloud 的安全秘钥(中等和困难) 双指针和随机哈希
- Axon Framework架构概述
- CodeForces 552C. Vanya and Scales(进制+思维)