P2308 新增括號

2022-04-12 02:23:39 字數 1307 閱讀 8224

一看這題---我能ac

看完這題---我要換題

這題第二問其實就是乙個鏈的石子合併,也就是不用處理環

所以一三問怎麼處理???

陣列 mid[ i ][ j ] 記錄區間 [ l , r ] 的斷點

陣列 le[ i ] 表示 a[i] 左邊有幾個左括號

陣列 ri[ i ] 表示 a[i] 右邊有幾個右括號

遞迴處理一下括號數

單數字兩邊肯定不能有括號

我們在區間左右各標記上左右括號之後,繼續向下遞迴,分別處理斷開的兩段區間

遞迴處理括號數

先輸出數字周圍的括號,再輸出這個數字,注意每兩個數字之間都是要有+連線的

然後輸出最小合併

遞迴輸出中間合併部分結果

合併左半部分的值,合併右半部分的值,兩個部分一起合併的值

注意(=的時候也是要更新一下mid的,可能是為了不斷動態更新我編不動了)

#include#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;inline

intread()

int n,a[25],sum[25

];int f[25][25],mid[25][25

];int le[25],ri[25

];void cnt(int l,int

r)void print(int l,int

r)int

main()

}f[i][j]+=sum[j]-sum[i-1

]; }

cnt(

1,n);

for(int i=1;i<=n;i++)

printf(

"\n%d\n

",f[1

][n]);

print(

1,n);

return0;

}

P2308 新增括號 dfs記錄dp路徑

傳送門 一看肯定是區間dp 因為和和合併石子很相似,都要加n 1次 轉移方程為 其中he i j 是i到j的和 dp i j min dp i j dp i k dp k 1 j he i j 問題 如何輸出括號 在轉移的時候,我們可以用vis i j 來記錄i到j合併的斷點k,所以可以分別遞迴i至...

luogu 2308新增括號

傳送門現在要添上n 1對括號,加法運算依括號順序進行,得到n 1個中間和,求出使中間和之和最小的添括號方法。這道題其實是乙個很簡單的區間dp,中間和的意思是括號裡面的和,也就是說,乙個括號就有乙個中間和,然後求總的中間和。設dp l r 表示區間 l,r 內最大中間和是多少,然後dp方程也是乙個很簡...

洛谷 p2651 新增括號III 思維,數學

題目傳送 題意 思路 我們首先想想如何判斷乙個分數是否能約分成整數 判斷方法 1 我們可以分解分子的質因子和分母的質因子,如果分母的質因子數量和種類數完全被分子的質因子包括,那麼一定可以約分成為整數 2 如果分母的所有因子都包含在分子的因子中如 10 和 20。10中的1 2 5 10都也是20的因...