集团网站建设特点 助君,没有公司可以做网站吗,怎样帮拍卖网站做策划,即墨网站建设哪家好这次是求联通子数组的求和#xff0c;我们想用图的某些算法#xff0c;比如迪杰斯特拉等#xff0c;但是遇到了困难。用BFS搜索能达到要求#xff0c;但是还未能成功。 那么我们这样想#xff0c;先将每行的最大子数组之和#xff0c;然后再将这些最大之和组成一个数组我们想用图的某些算法比如迪杰斯特拉等但是遇到了困难。用BFS搜索能达到要求但是还未能成功。 那么我们这样想先将每行的最大子数组之和然后再将这些最大之和组成一个数组在进行求和这样就保证了加入中间一行为负数再进行筛选。增加了直接相加的正确率。 实现代码 #include iostream
#include fstream
using namespace std;
int Max(int Array[],int length) { int maxSumOfArray,maxSum; int first0,last1; maxSumOfArraymaxSumArray[0]; //当我们加上一个正数时和会增加当我们加上一个负数时和会减少。 //如果当前得到的和是个负数那么这个和在接下来的累加中应该抛弃并重新清零不然的话这个负数将会减少接下来的和。 for(int i1;ilength;i) { maxSumOfArraymax(maxSumOfArrayArray[i],Array[i]); //变量maxSumOfArray 为包含Array[i] 与Array[i] 取最大 maxSummax(maxSum,maxSumOfArray); ////变量maxSum 为maxSum 与 maxSumOfArray 取最大 } cout最大子数组和maxSumendl; return maxSum; } int main() { int a; int i0,j0; int b[10][10],c[10]; FILE * fp1 fopen(E:\\input.txt, r);//打开输入文件 if (fp1NULL) {//若打开文件失败则退出 puts(不能打开文件); return 0; } int M,N; fscanf(fp1,%d,a); Ma; //行 cout行数:Mendl; fscanf(fp1,%d,a); Na; //列 cout列数:Nendl; for (i0;iM;i) { for(j0;jN;j) { if(fscanf(fp1,%d,a)1) { b[i][j]a; coutb[i][j] ; } } coutendl; } cout文件已经读取到第 ftell(fp1) 个偏移字节endl;//输出fp1指针当前位置相对于文件首的偏移字节数 fclose(fp1);//关闭输入文件 int thismax[10]; //存放数组每行的最大子数组 cout每行的最大数组和endl; for(i0;iM;i) { for(j0;jN;j) { c[j]b[i][j]; } thismax[i]Max(c,N); } cout每行的最大子数组之和再求和endl; int sumMax(thismax,M); //每行作为一个数组再求最大的子数组和 cout最大联通子数组的和为sumendl; return 0; } 这种方法只能在某些情况下可以实现更加完整的我们还在完善。 队友 于磊http://www.cnblogs.com/cnyulei/ 转载于:https://www.cnblogs.com/L-Damon-v/p/5360829.html