最大连续字串和与最大连续子串积
来源:互联网 发布:js实现旋转 编辑:程序博客网 时间:2024/04/30 18:29
问题:
最大连续子序列之和问题描述为:数组中里有正数也有负数,连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值。分析,对数组a进行一遍扫描,sum[i] 为前i个元素中,包含第i个元素且和最大的连续子数组,MaxSum保存当前子数组中最大和,对于a[i+1]来说,sum[i+1] = sum[i]+a[i+1],此时如果sum[i+1]<0,那么sum需要重新赋0,从i+1之后开始累加,如果sum[i+1]>0,那么MaxSum = max(MaxSum, Sum[i+1])。代码如下:
#include<iostream> #include<vector> #include<algorithm> #include<fstream>#include<iostream>#include<set>using namespace std;double get_max_sum(vector<double>&dou){int size = dou.size();vector<double>sum(size, 0);sum[0] = dou[0];double max_sum = sum[0];for (int i = 1; i < size; i++){sum[i] = max(sum[i-1]+dou[i],dou[i]);//sum[i]表示以i为结尾的最大连续字串和,那么字串的开头可能是[0,1]之间的任何一个数if (sum[i]>max_sum)max_sum = sum[i];}return max_sum;}int main(){ifstream fin("c:\\users\\dell\\desktop\\data.txt");vector<double>dou;double num,temp;while (fin >> num){for (int i = 0; i < num; i++){fin >> temp;dou.push_back(temp);}double re = get_max_sum(dou);cout << re << endl;dou.clear();}}2.最大连续字串积
代码:
#include<iostream> #include<vector> #include<algorithm> #include<fstream>#include<iostream>#include<set>using namespace std;double get_max_proc(vector<double>&dou){int size = dou.size();double maxpro,temp;vector<double>max_pro(size, 0);//保存最大乘积vector<double>min_pro(size,0);//保存最小乘积max_pro[0] = dou[0];min_pro[0] = dou[0];maxpro = max(max_pro[0],max_pro[0]);for (int i = 1; i < size; i++){max_pro[i] = max(dou[i],max(max_pro[i-1]*dou[i],min_pro[i-1]*dou[i]));min_pro[i] = min(dou[i], min(min_pro[i - 1] * dou[i], max_pro[i - 1] * dou[i]));temp = max(max_pro[i],min_pro[i]);if (temp>maxpro)maxpro = temp;}return maxpro;}int main(){ifstream fin("c:\\users\\dell\\desktop\\data.txt");vector<double>dou;double num,temp;while (fin >> num){for (int i = 0; i < num; i++){fin >> temp;dou.push_back(temp);}double re = get_max_proc(dou);cout << re << endl;dou.clear();}}转态转移方程为:
max_pro[i] = max(dou[i],max(max_pro[i-1]*dou[i],min_pro[i-1]*dou[i]));
min_pro[i] = min(dou[i], min(min_pro[i - 1] * dou[i], max_pro[i - 1] * dou[i]));
其中max_pro[i]表示以第i个元素结尾的最大连乘积,min_pro[i]表示以第i个元素结尾的最小连乘积.
0 0
- 最大连续字串和与最大连续子串积
- 最大连续字串和
- 最大连续字串和
- 分治连续和最大字串
- 最大连续字串和、积
- 最大连续乘积字串
- 最大连续字串求和
- 最大连续递增数字串
- hdu1003——max sum;(最大连续字串和)
- 给定无序数组求连续字串最大和
- 最大连续和
- 连续最大和
- 最大连续和问题
- hdu1003 连续最大和
- 最大连续整数和
- 最大连续和--分治
- 最大连续和
- 最大连续和
- iOS10 新特性适配Label显示不全问题
- strpos中needle为数字时会怎么样
- 为什么我们需要PRINCE2认证——上海信息化培训中心
- python字典按键或值排序
- spark-shell无法退格/删除
- 最大连续字串和与最大连续子串积
- HDU 2577 How to Type DP .
- 为什么Java有GC还需要自己来关闭某些资源?
- iOS指纹解锁
- UltraEdit使用技巧
- hdu 4111 Alice and Bob(中档博弈题)★ ★
- 使用jQuery UI插件实现切换主题功能——经验小结
- 公司(企业与市场)与商业模式
- 20169月17-25日---身体,革命的本钱