创办一个网站能挣钱吗,如何写网站优化方案,wordpress的图片代码是什么,怎么创建一个博客网站在一个圆形操场的四周摆放着n堆石子#xff0c;现要将石子有次序地合并成一堆。规定每次只能选相邻2堆石子合并成新的一堆#xff0c;并将新的一堆石子数记为该次合并的得分。试设计一个算法#xff0c;计算出将n堆石子合并成一堆的最小得分和最大得分。
输入格式:
n表示n…在一个圆形操场的四周摆放着n堆石子现要将石子有次序地合并成一堆。规定每次只能选相邻2堆石子合并成新的一堆并将新的一堆石子数记为该次合并的得分。试设计一个算法计算出将n堆石子合并成一堆的最小得分和最大得分。
输入格式:
n表示n堆石子下一行n个数表示每堆石子的个数。可能有多组测试数据。
输出格式:
分别输出最小得分和最大得分空格隔开。每组一行。
输入样例:
在这里给出一组输入。例如
4
4 4 5 9输出样例:
在这里给出相应的输出。例如
43 54 注连着找最值 不能 直接找最值合并 例1 3 4 2 5
二维数组几乎全部用到了 不是三角形状 行代表起点开始的位置 列代表从起点开始向后的距离
#include stdio.hint main()
{int n;while(scanf(%d,n)!EOF){int a[n1],max[n1][n1],min[n1][n1];for (int i0;in1;i)//二维数组全部初始化为0{for (int j0;jn1;j){min[i][j]0;max[i][j]0;}}for (int i1;in1;i)//输入scanf(%d,a[i]);for (int len2;lenn;len)//分割长度从2开始到n结束{for (int begin1;begin n;begin)//起点{int end beginlen-1; //终点if (endn) //大于才取模 因为从1开始 需要分情况 从0开始不需要endend%n;for (int k1;klen;k) //分割的长度 从1开始 {int sum0,locbegin; //记录合并后需要新加的数for (int ii0;iilen;ii) {suma[loc];if (locn)loc(loc)%n;}lockbegin;if (locn)locloc%n;//二维数组几乎全部用到了 不是三角形状 行代表起点开始的位置 列代表从起点开始向后的距离if(!min[begin][len] || min[begin][len] min[begin][k] min[loc][len-k] sum )min[begin][len] min[begin][k] min[loc][len-k] sum;if (!max[begin][len] || max[begin][len] max[begin][k] max[loc][len-k] sum )max[begin][len] max[begin][k] max[loc][len-k] sum;}}}int Min99999,Max0;for (int i1;in;i) //列代表从起点开始向后的距离 所以需要遍历所有起点且距离为n的位置{if (Min min[i][n])Min min[i][n];if (Max max[i][n])Max max[i][n];}printf(%d %d\n,Min ,Max);//[1][n]}
}