洛谷P2470 SCOI2007 壓縮

2022-05-05 21:27:11 字數 967 閱讀 3166

#include#include

#include

using

namespace

std;

#define maxn 55

#define inf 0x3f3f3f3f

#define mid ((l+r)>>1)

int n,f[maxn][maxn][2

];//

不妨處理每個子串時,我們都在它的前面放乙個m,最後答案長度-1即可

//f[l][r][0]表示子串[l,r]中除了前面的m,串中還存在其他的m的最短長度

//f[l][r][1]則表示只有前面乙個m的最短長度

/*三個轉移方程:

1.if(該串左右兩半相同)

f[l][r][1]=min(f[l][r][1],f[l][mid][1]+1); 壓縮與不壓縮

2. i l~r-1

f[l][r][1]=min(f[l][r][1],f[l][i][1]+r-i);

3. i l~r-1

f[l][r][0]=min(f[l][r][0],min(f[l][i][0],f[l][i][1])+min(f[i+1][r][0],f[i+1][r][1]));

*/char

s[maxn];

int dp(int l,int r,bool

op)

if(flag) d=min(d,dp(l,mid,1)+1

);

for(int i=l;i)

d=min(d,dp(l,i,1)+r-i);

}else

for(int i=l;i)

d=min(d,min(dp(l,i,0),dp(l,i,1))+min(dp(i+1,r,0),dp(i+1,r,1

)));

returnd;}

intmain()

洛谷P2472 SCOI2007 蜥蜴 題解

這道題用最大流解決。首先構建模型。一根柱子可以跳入和跳出,於是拆成兩個點 入點和出點。每一根柱子的入點和出點連一條流量為高度的邊,來限制蜥蜴跳入的次數。當柱子a可以調到柱子b時,就從a的出點向b的入點連邊,流量inf。s向所有有蜥蜴的柱子的入點連邊,流量為1 t表示地圖外一點,當一根柱子能跳到地圖外...

洛谷P2472 SCOI2007 蜥蜴 題解

這道題用最大流解決。首先構建模型。一根柱子可以跳入和跳出,於是拆成兩個點 入點和出點。每一根柱子的入點和出點連一條流量為高度的邊,來限制蜥蜴跳入的次數。當柱子a可以調到柱子b時,就從a的出點向b的入點連邊,流量inf。s向所有有蜥蜴的柱子的入點連邊,流量為1 t表示地圖外一點,當一根柱子能跳到地圖外...

洛谷P4467 SCOI2007 k短路 題解

題目傳送門 題目大意 求乙個圖中起點到終點的簡單路中的第k短路,以長度為第一關鍵字,經過城市的字典序為第二關鍵字。思考過程 我們肯定是無法把所有的情況都求出來再排個序解決的,所以只能估計每條路徑的長度,盡量早地求出前k短路,也就是用a 演算法。具體做法 首先將所有邊反向,從終點跑一遍是spfa,將每...