區間dp HAOI2008 玩具取名

2021-10-24 23:20:21 字數 1105 閱讀 1533

簡單的區間合併,因為最終結果的長度最多為4,所以dp設為3維,dp[i][j][k]表示[i, j]區間內能否由k這個字母產生。

#include

using

namespace std;

typedef

long

long ll;

//三年競賽一場空,不開long long見祖宗

//typedef __int128 lll;

#define print(i) cout << "debug: " << i << endl

#define close() ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)

#define mem(a, b) memset(a, b, sizeof(a))

#define x first

#define y second

typedef pair<

int,

int> par;

const ll mod =

1e9+7;

const

int maxn =

210;

const

int inf =

0x3f3f3f3f

;int dp[maxn]

[maxn][5

];char s[maxn]

;vector vec[5]

;char tochar=

;map<

char

,int

> toint;

int num[5]

;int

main()

}}int flag =0;

for(

int i =

1; i <=

4; i++)if

(dp[1]

[n][i]

) cout << tochar[i]

, flag =1;

if(!flag) cout <<

"the name is wrong!"

; cout << endl;

}

線段樹(2)區間修改

快速序列操作i,給出乙個n個元素的陣列a1,a2,an,你的任務是設計乙個資料結構支援一下兩種操作 set l,r,v 把al,al 1,ar的值全部修改為v v 0 query l,r 計算子串行al,al 1,ar的元素和 最小值和最大值。include include using namesp...

線段樹2(區間更新)

區間更新是指更新某個區間內的葉子節點的值,因為涉及到的葉子節點不止乙個,而葉子節點會影響其相應的非葉父節點,那麼回溯需要更新的非葉子節點也會有很多,如果一次性更新完,操作的時間複雜度肯定不是o lgn 例如當我們要更新區間 0,3 內的葉子節點時,需要更新出了葉子節點3,9外的所有其他節點。為此引入...

模板 線段樹(2)區間修改

好像叫做懶操作來著。還是叫延遲修改更高大上一點吧 區間修改 兩種操作 add l r v 把a l a l 1 a r 的值全部增加v query l r 計算子串行a l a l 1 a r 的元素和,最小值和最大值 修改 查詢的範圍均為 y1,y2 維護節點o,它對應區間 l,r void ma...