對我來說很難的dp UVA1625

2021-10-02 09:04:28 字數 2242 閱讀 6778

其實dp可能本身並不難,主要是要找到狀態轉移方程

這個是乙個讓我引發深思的dp

兩個字串,兩個,兩個,什麼東西都是兩個,貌似兩個,然後有先後拿的順序就可以dp

這似乎是乙個規律,而且資料規模往往在 n^2可以解決的情況

比如 1e3 ~ 5e3這個資料量

話不多說看一下這道題的描述

描述很簡單就是兩個字串給你,然後你可以從第乙個字串和第二個字串的頭拿字母,然後湊成乙個新的字串

然後乙個字串裡面相距最遠的同乙個字母的距離定位l(c) 求這個l(c) 總和最小為多少

比如兩個字串是

gbby

yrrgb

可以從第二個字串拿乙個字母y

再從第二個字串拿乙個字母r

再從第二個字串拿乙個字母r

再從第乙個字串拿乙個字母g

變成yrrg

狀態轉移方程很好想到 設dp(i, j) 表示第乙個字串拿i個 第二個字串拿j個時的狀態

那麼狀態只能從上層狀態 dp(i - 1, j) 和 dp(i, j - 1) 轉移而來

要求這個總和,可以想到乙個辦法

這個辦法紫書有講到,我不好描述就直接摘抄了

當把乙個顏色移到最終序列錢,需要把所有已出現但還未結束的顏色的l(c)值加以,更一步的,因為並不關心每個顏色的l(c),只需要知道多少種顏色已經開始但尚未結束

書中舉了乙個例子

例如序列gbby和yrrgb,分別移走了1個和3個元素 已經合併成yrrg 這個時候再從第二個序列拿走g y和g需要加1,下次再從序列1拿走乙個元素(b) 只有y需要加1 因為g已經結束

因此這道題的重點從狀態轉移方程轉成了,如何求每個狀態,開始但還未結束的顏色的數量是多少呢?

這個很簡單,只要知道某個元素在序列1和序列2出現和結束的位置就可以了,這個可以在o(n)的時間內得到

然後再根據在第乙個序列和第二個序列某個元素分別出現和結束的位置 在o(n^2)的時間內可以得到每個狀態開始但還未結束的顏色的數量

因此**如下,我的**比別人的長很多。。

另外我原本startt這個變數寫的是_start鬼知道會被當做程式的入口函式,然後導致我ce兩次,而且這個ce不會報錯。。

真是什麼坑都踩了。

#include

#define ll long long

#define ms(s) memset(s, 0, sizeof(s))

#define rep(i, a, b) for(int i = (a); i < (b); i++)

#define inf 0x3fffffff

using

namespace std;

const

int maxn =

5e3+10;

int startt[26]

[2];

int endd[26]

[2];

int cnt[maxn]

[maxn]

;int dp[maxn]

[maxn]

;int

main()

}for

(int i = n -

1; i >=

0; i--)}

for(

int i =

0; i < m; i++)}

for(

int i = m -

1; i >=

0; i--)}

cnt[0]

[0]=

0;for(

int i =

0; i <= n; i++)if

(endd[index][0

]== i -1&&

(endd[index][1

]<= j -1)

)}if(j)

if(endd[index][1

]== j -1&&

(endd[index][0

]<= i -1)

)}// cout << cnt[i][j] << ' ';

}// cout << endl;

}for

(int i =

0; i <= n; i++

)else

if(i)

else

if(j)

else}}

cout << dp[n]

[m]<< endl;

}return0;

}

我來說說C 的類

類class 基礎知識 一 c 類的定義方法 class classname 類似結構體的定義,類的定義也必須是以分號 作為結束標誌。訪問許可權說明 有public private 和protected 三種訪問許可權,且一般乙個類裡會含有兩種訪問許可權說明,一是必須有 public 而另乙個是 p...

太棒了!今天對我來說又是新的一天!

在昨天我還悶悶不樂!因為我在應聘乙份銷售崗位的第二輪面試中被刷下來了!雖說有些可惜,沒有發揮好,但也確實是能力所致所以也沒什麼怨言!作為一名學軟體工程的學生,我除了喜歡程式設計以外,對銷售也情有獨鍾!但對我來說也是件好事,因為我是第一次這麼親身體會到現在用人單位對新人考核的嚴格性,認識到自己很多的不...

我來說說我給寶寶買保險的事

我是純粹的外行,之前有買保險的打算時,做了一點功課,了解了才發現,除去那些小的保險公司,大一點的保險公司的兒童類保險也是五花八門的,看的我頭暈眼花,不過確定了幾條方向,在根據這個去找符合自己要求,就要清晰一些了。看了許多相關資訊後,我比較贊同一些專家的意見,就是大人的保險比寶寶的更重要,在給寶寶買保...