首页 > 代码库 > UVa 11059 - Maximum Product
UVa 11059 - Maximum Product
题目:最大字段积。
分析:dp,最大字段和类似物。求解过程同最大字段和。
这里注意,设置两个状态:以本元素结束时,最大正值和最小的负值。
更新时,如果data[i]为正,则对应跟新,如果data[i]为负,则交叉跟新,
data[i]为0时,当前最大值,最小值置零。
本题数据较小,可以直接用O(n^2)暴力算法,枚举起始结束位置即可。
说明:用long long防止溢出。
#include <iostream> #include <cstdlib> #include <cstring> using namespace std; int data[20]; int main() { int n,t = 1; while (cin >> n) { for (int i = 1 ; i <= n ; ++ i) cin >> data[i]; long long max = 0,neg = 0,pos = 0,tem; for (int i = 1 ; i <= n ; ++ i) { if (data[i] == 0) neg = pos = 0; else if (data[i] > 0) { pos = pos*data[i]; neg = neg*data[i]; if (!pos) pos = data[i]; }else if (data[i] < 0) { tem = pos*data[i]; pos = neg*data[i]; neg = tem; if (!neg) neg = data[i]; } if (max < pos && data[i]) max = pos; } cout << "Case #" << t ++ << ": The maximum product is " << max << ".\n\n"; } return 0; }
UVa 11059 - Maximum Product
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。