当前位置: 首页 > news >正文

白沟17网站一起做网店友情链接购买

白沟17网站一起做网店,友情链接购买,投资网站,旅游网站源码下载题目描述 有一个 n n n 个元素的数组 a a a。不改变序列中每个元素在序列中的位置,把它们相加,并用括号记每次加法所得的和,称为中间和。现在要添上 n − 1 n - 1 n−1 对括号,加法运算依括号顺序进行,得到 n − …

题目描述

有一个 n n n 个元素的数组 a a a。不改变序列中每个元素在序列中的位置,把它们相加,并用括号记每次加法所得的和,称为中间和。现在要添上 n − 1 n - 1 n1 对括号,加法运算依括号顺序进行,得到 n − 1 n - 1 n1 个中间和,求出使中间和之和最小的添括号方法。


例如:给出序列是 4 , 1 , 2 , 3 4,1,2,3 4,1,2,3

第一种添括号方法:
( ( 4 + 1 ) + ( 2 + 3 ) ) = ( ( 5 ) + ( 5 ) ) = ( 10 ) ((4 + 1) + (2 +3)) = ((5) + (5)) = (10) ((4+1)+(2+3))=((5)+(5))=(10)
有三个中间和是 5 , 5 , 10 5,5,10 5,5,10 ,它们之和为: 5 + 5 + 10 = 20 5 + 5 + 10 = 20 5+5+10=20

第二种添括号方法:
( 4 + ( ( 1 + 2 ) + 3 ) ) = ( 4 + ( ( 3 ) + 3 ) ) = ( 4 + ( 6 ) ) = ( 10 ) (4 + ((1 + 2) + 3)) = (4 + ((3) + 3)) = (4 + (6)) = (10) (4+((1+2)+3))=(4+((3)+3))=(4+(6))=(10)
有三个中间和是 3 , 6 , 10 3,6,10 3,6,10 ,它们之和为 3 + 6 + 10 = 19 3 + 6 + 10 = 19 3+6+10=19


输入格式

第一行输入一个整数 n n n,表示 a a a 元素个数。
第二行输入 n n n 个整数 a i a_i ai

输出格式

第一行输出添加括号的方法。
第二行输出最终的中间和之和。
第三行输出 n − 1 n - 1 n1 个中间和,按照从里到外,从左到右的顺序输出。

样例

样例输入1:

4
4 1 2 3

样例输出1:

(4+((1+2)+3))
19
3 6 10

样例解释见上。

数据范围

1 ≤ n ≤ 20 1 \le n \le 20 1n20
1 ≤ a i ≤ 100 1 \le a_i \le 100 1ai100

题解

+ + + 看成合并左右两个元素, ( ) () () 限定合并顺序。

按照正常的 区间dp ,很容易计算出中间和之和。


那如何输出算式和每个中间和呢?

当把区间 i , k i, k i,k k + 1 , j k + 1, j k+1,j 合并成 i , j i, j i,j 时,记录 k − i k - i ki 的值(合并位置 d i , j d_{i, j} di,j)。
然后写一个 dfs,传两个参数 l l l r r r,表示 l l l r r r 的区间。

  • 如果 l ≥ r l \ge r lr,返回。
  • 如果 l < r l < r l<r,将 l l l r r r 的区间拆分为两个区间进行 dfs l l l l + d i , j l + d_{i, j} l+di,j l + d i , j + 1 l + d_{i, j} + 1 l+di,j+1 r r r),并将 l l l 的左括号数( f 1 l f1_l f1l)加 1 1 1 r r r 的右括号数( f 2 r f2_r f2r)加 1 1 1

接下来从 1 1 1 n n n 输出,先输出 f 1 i f1_i f1i 个左括号,再输出 a i a_i ai,然后输出 f 2 i f2_i f2i 个右括号。如果 i ≠ n i \ne n i=n,还要输出 + + +

这样就能轻松地输出算式了。

输出中间和也是同理,可用前缀和优化。

int f[40][40];//dp
int sum[40];//前缀和
int d[40][40];//从 i 到 j 合并的点
int f1[40], f2[40];//左括号数和右括号数
//算式
void dfs(int x, int y){if(x >= y){return;}dfs(x, x + d[x][y]);dfs(x + d[x][y] + 1, y);f1[x] ++;f2[y] ++;
}
//中间和
void dfs2(int x, int y){if(x >= y){return;}dfs2(x, x + d[x][y]);dfs2(x + d[x][y] + 1, y);printf("%d ", sum[y] - sum[x - 1]);
}
int main(){输入//初始化memset(f, 0x3f, sizeof(f)))memset(d, 0, sizeof(d));for(int i = 1; i <= n; ++ i){f[i][i] = 0;}//前缀和for(int i = 1; i <= n; ++ i){sum[i] = sum[i - 1] + a[i];}for(int k = 1; k < n; ++ k){for(int i = 1; i <= n - k; ++ i){int j = i + k;for(int u = i; u < j; ++ u){//更新 f[i][j]if(f[i][j] > f[i][u] + f[u + 1][j]){f[i][j] = f[i][u] + f[u + 1][j];d[i][j] = u - i;}}f[i][j] += sum[j] - sum[i - 1];}}//输出 dfs(1, n); for(int i = 1; i <= n; ++ i){while(f1[i]{putchar('(');f1[i] --;}printf("%d", a[i]);while(f2[i]){putchar(')');f2[i] --;}if(i != n){putchar('+');}}printf("\n%d\n", f[1][n]);dfs2(1, n)return 0;
}

禁止抄袭!!!

http://www.yidumall.com/news/43669.html

相关文章:

  • 做公司网站需要几个域名百度seo引流怎么做
  • 好看的html页面模板泰州seo平台
  • 武汉做商城网站建设百度云登陆首页
  • 自己做的网站谁来维护百度学术官网入口
  • 如何进行营销型企业网站的优化关键词歌曲免费听
  • 深圳市住建设局网站优化方案官方网站
  • 邯郸景区网站制作苏州seo关键词优化排名
  • 网站部署到终端机怎么做seo网络优化是什么工作
  • 几级英语可以做外贸网站seo网站降权查询工具
  • 浅谈中兴电子商务网站建设郑州seo服务技术
  • 佛山网站到首页排名百度推广登录平台登录
  • 做学术用的网站双滦区seo整站排名
  • 电子商务型网站建设seo百科大全
  • bluehost网站后台百度seo排名优化公司哪家强
  • 中国电信新建网站备案管理系统 录完信息网络营销企业有哪些
  • vbs做网站免费网站友情链接
  • 怎么建设时时彩网站大连网络营销seo
  • web制作网页个人简历广州百度seo排名优化
  • 电子商务网站建设与设计推广app拿返佣的平台
  • 制作网站建设的关键词seo优化公司
  • 响应式企业网站设计百度百家官网入口
  • 网站无法打开的原因哈尔滨网站建设
  • 活动策划网站自动推广工具
  • 网站对不同分辨率软文营销的作用
  • 宝安哪有网站建设视频号怎么付费推广
  • 做外语网站合肥seo建站
  • 发布文章后马上更新网站主页掉发脱发严重是什么原因
  • 口碑好的徐州网站建设百度快照推广是什么意思
  • 南京网站制作系统安徽360优化
  • 建设网站项目概况旺道seo营销软件