1001 Problem A
来源:互联网 发布:还原网络设置会怎样 编辑:程序博客网 时间:2024/06/03 16:03
题意:
给一串数求其中某一段的最大值 并且求出这一段的起点和终点
思路:
我一开始想的是由a[i][j]=a[i-1][j]+a[i][j+i]来做
就像这样 我以为一串数最多二十个
代码如下
#include<iostream>#include<fstream>using namespace std;int a[20][20];int main(){ //fstream cin("E:/C++/IN/aaa.txt"); int b; cin >> b; int d = b; while (b--) { int m,n,t = 0; m = n = 0; int c = 0; cin >> c; for (int i = 0;i < c;i++) { cin >> a[i][i]; } for (int i = 0;i < c;i++) for (int j = i + 1;j < c;j++) { a[j][i] = a[j - 1][i] + a[j][i + j]; if (t < a[j][i]) { t = a[j][i]; m = i+1; n = j+1; } } if (d - b - 1)cout << endl; cout << "Case " << d-b<<":"<<endl; cout << t << " " << m << " " << n << endl; } return 0;}
但是 后来我发现一串数最多可以有100000个 那样 就没法用数组做了
后来的做法是:
每一次输入都与前面数的和相加 如果结果还小于输入的数 那证明前面数的和为负数 那这一段肯定会使最后的和变小 所以要去掉 即把开始数置为这个数。否则保留和 与最大值比较 如果比最大值大 保存为最大值,把结束计数置为此时的数。
#include<iostream>#include<fstream>using namespace std;int a;int main(){ //fstream cin("E:/C++/IN/aaa.txt"); int b; cin >> b; int d = b; while (b--) { //s为开始计数,e为结束计数。m为中间数用于传递值,t为前面数的和 int s,e,m,t = -1000; int max = -1000; s=e=m = n = 1; int c = 0; cin >> c;//输入一共多少个数 cin >> t;//输入第一个数,初始化前面数的和 max = t;//初始化和的最大值 for (int i = 2;i <= c;i++)//共输入c-1个数 { cin >> a;//输入新的数 if (a > t + a)//如果新的数小 重置 { t = a;//重新初始化 相当于把前一段数扔掉 m = i;//把开始计数器置为当前值 } else { t = t + a;//前面数的和相加 } if(t>max)//判断已经输入的数的和与最大值的大小 { max = t;//如果比最大值大 最大值置为当前状态 s = m; e = i; } } cout << "Case " << d-b<<":"<<endl; cout << max << " " << s << " " << e << endl; if (b)cout << endl;//输出的空行 } return 0;}
0 0
- 1001 A + B Problem
- 1001 A + B Problem
- 1001 Problem A
- 1001 Problem A
- 1001 Problem A
- 1001 Problem A
- 西安电子Problem 1001 A+B Problem
- ZOJ Problem Set - 1001||A + B Problem
- zoj 1001 A+B Problem
- ZOJ 1001 A + B Problem
- ZOJ 1001 A + B Problem
- ZJUT 1001 A+B Problem
- ZOJ - 1001--A + B Problem
- ZOJ 1001 A + B Problem
- [ZOJ][1001]A + B Problem
- ZOJ 1001 A + B Problem
- 洛谷1001 A+B Problem
- 【洛谷】1001 A+B Problem
- shiro---你的所见所得由我决定
- 关于Hello Hell项目的经验总结
- STL 源码剖析 queue
- Java:垃圾回收机制
- APP开发之原型图设计
- 1001 Problem A
- 剑指Offer--031-连续子数组的最大和
- C经典 指针与指针所指向的值的区别
- CompletionService 和ExecutorService的区别和用法
- Codeforces 667A Pouring Rain 667B Coat of Anticubism
- centos下hadoop2.6伪分布式环境搭建
- HDU-2112-HDU Today
- ConcurrentHashMap实现原理
- Centos6.6 安装oracle11g r2