一看這題---我能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的因...