区间dp-洛谷P2308 添加括号
来源:互联网 发布:synchronization java 编辑:程序博客网 时间:2024/06/05 08:12
https://www.luogu.org/problem/show?pid=2308#sub
就是区间dp;
因为一定要加n-1个括号;
输出答案的时候和加分二叉树一样;
然后从左到右是指让括号靠又,所以k尽可能靠右;
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#define Ll long longusing namespace std;int a[50],h[50],hh[50],f[50][50],g[50][50],sum[51];int n,m;void dfs(int x,int y){ if(x==y)return; h[x]++; hh[y]++; dfs(x,g[x][y]); dfs(g[x][y]+1,y);}void DFS(int x,int y){ if(x==y)return; DFS(x,g[x][y]); DFS(g[x][y]+1,y); cout<<sum[y]-sum[x-1]<<' ';}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); f[i][i]=0; } for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i]; for(int i=n-1;i;i--) for(int j=i+1;j<=n;j++) { f[i][j]=1e9; for(int k=i;k<j;k++){ if(f[i][k]+f[k+1][j]+sum[j]-sum[i-1]<=f[i][j]){ f[i][j]=f[i][k]+f[k+1][j]+sum[j]-sum[i-1]; g[i][j]=k; } } } dfs(1,n); for(int i=1;i<=n;i++){ for(int j=1;j<=h[i];j++)cout<<'('; cout<<a[i]; if(!hh[i]&&i!=n)cout<<'+'; for(int j=1;j<=hh[i];j++)cout<<')'; if(hh[i]&&i!=n)cout<<'+'; }cout<<endl; cout<<f[1][n]<<endl; DFS(1,n);}
1 0
- 区间dp-洛谷P2308 添加括号
- 括号序列 区间DP
- 区间dp括号匹配
- 区间dp理解 添加最少的括号使得括号字符串匹配
- poj2955,括号匹配,区间dp
- 【区间dp】括号序列再战猪猪侠
- nyoj+区间dp括号匹配
- poj2955Brackets【区间dp 括号匹配】
- POJ 2955 括号匹配,区间DP
- POJ 2955 Brackets 括号匹配 区间DP
- poj 2955 区间dp 括号匹配
- NYOJ 括号匹配(二) 区间DP
- poj1141(括号匹配-区间dp)
- NYOJ15 - UVA1626 括号匹配问题(区间dp)
- NYOJ15括号匹配(=)区间DP
- 区间dp 括号匹配 nyoj 15
- NYOJ15-括号匹配(二)-区间DP
- 区间DP——括号匹配
- div+css 之 定位 position与样式选择器
- mysql批量更新
- 数据结构—Problem C: 调整表中元素顺序(线性表)
- mysql远程访问另一台主机数据库表
- Linux之相关权限---chown chmod umask
- 区间dp-洛谷P2308 添加括号
- 频分复用和时分复用
- 解决:ERR_CONTENT_LENGTH_MISMATCH
- Netty学习(一)-为什么选择Netty
- 洛谷 P2089 烤鸡
- Eclipse 安装 SVN 插件的两种方法
- iOS开发1-UILabel设置行间距和字间距
- frameset的使用
- mysql——二进制日志BINARY LOG清理