di字串在i位置是』d』:dp[i][j] += dp[i-1][k] for k >= j
di字串在i位置是』i』:dp[i][j] += dp[i-1][k] for k < j
由遞推公式可以看出我們需要的是dp[i][0],dp[i][1],…,dp[i][j]的和,因此我們改變dp[i][j]的意義,dp[i][j]此時代表前述的和,做到這一點只需要在**中新增dp[i][j]+=dp[i][j-1]
官方題解裡對轉移公式的描述不是很清楚,紙上模擬是對的
據題意,我們只需要保證兩個數字之間的大小關係,如果所有數字都增大1,該序列的大小關係依然和變化之前一樣。或者說該序列中大於某個數的數字全部增大,序列的大小關係也不變。所以這裡隱藏在題中的轉移規律是:
從"21"和本次的s[i]=「上公升」,在如果要以』1』結尾它的前乙個至少是0,不可能
以「2」結尾時,將「21」中所有大於等於2的數字都加1,在把2新增到末尾:「21」->「31」->「312」
以「3」結尾時,將「21」中所有大於等於3的數字都加1,這裡沒有比3大的數字,可以直接把3新增進末尾。
再說轉移方程
在計算以第i個數字是k結尾有多少種時:
1、第i個數字是下降,將所有第i-1個數字是以m結尾(m>=k)的序列選出來,把k放到這些序列的末尾,之前一直沒想通乙個問題,如果這些序列中已經有k這個陣列了,特殊情況是m就等於k,那麼數字就重複了。就像上面那種變化方式,可以將這些序列所有大於等於k的數字全部加1,再把k放到末尾,這樣會構成新的序列,滿足當前的大小關係,並且以k結尾。這裡其實分了兩種情況,m>k和m=k,因為m>k中的序列可能有等於k的數字存在,需要將所有大於等於k的數字都加1,騰出k這個數字用於放到末尾,m=k時,也可以用同樣的方法構造一種不同的序列,所以這兩個種情況可以一起處理。
2、第i個數字是上公升,將所有第i-1個數字是以m結尾(m
愛奇藝 筆試
題目描述 時間限制 1秒 空間限制 32768k 牛牛養了n只奶牛,牛牛想給每只奶牛編號,這樣就可以輕而易舉地分辨它們了。每個奶牛對於數字都有自己的喜好,第i只奶牛想要乙個1和x i 之間的整數 其中包含1和x i 牛牛需要滿足所有奶牛的喜好,請幫助牛牛計算牛牛有多少種給奶牛編號的方法,輸出符合要求...
愛奇藝 筆試刷題
題目描述 牛牛和羊羊非常無聊.他們有n m個共同朋友,他們中有n個是無聊的,m個是不無聊的。每個小時牛牛和羊羊隨機選擇兩個不同的朋友a和b.如果存在多種可能的pair a,b 任意乙個被選到的概率相同。然後牛牛會和朋友a進行交談,羊羊會和朋友b進行交談。在交談之後,如果被選擇的朋友之前不是無聊會變得...
愛奇藝 筆試刷題
題目描述 乙個完整的括號字串定義規則如下 1 空字串是完整的。2 如果s是完整的字串,那麼 s 也是完整的。3 如果s和t是完整的字串,將它們連線起來形成的st也是完整的。例如,和 是完整的括號字串,和 是不完整的括號字串。牛牛有乙個括號字串s,現在需要在其中任意位置盡量少地新增括號,將其轉化為乙個...