ZJOI模擬 數字 數字dp

2021-08-18 21:18:31 字數 1347 閱讀 1474

題目描述:已知t

,lx,

rx,l

y,ry

t ,l

x,rx

,ly,

ry

,問在滿足lx

≤x≤r

x,ly

≤y≤r

y,xo

ry=t

l x≤

x≤rx

,ly≤

y≤ry

,xor

y=

t的情況下,w=

xand

y w=x

andy

有多少種取值。

解題思路:

數字 dp 會變得比較方便。

考慮乙個數 w,我們要判斷是否存在一組 (x,y) 使得 lx ≤ x ≤ r x ,ly ≤ y ≤ r y 且

x ∨ y = t,x ∧ y = w。

這個過程就是從高位到低位構造 (x,y) 的過程。

• 若 t 的當前位為 0,w 的當前位為 0,則 x 和 y 當前位都填 0。

• 若 t 的當前位為 0,w 的當前位為 1,則這是乙個不合法的狀況。

• 若 t 的當前位為 1,w 的當前位為 0,則當前位上可能 x 填 0,y 填 1,

也可能 x 填 1,y 填 0。

• 若 t 的當前位為 1,w 的當前位為 1,則 x 和 y 當前位都填 1。

x 和 y 各自已經填了的部分可能挨著rx與 ry或lx與ly的上界 (即 x 或 y 的已填部

分是 r x 或 r y或lx或ly 的字首),也可能不挨,這樣就有 3 × 3 = 9 種狀態。

之前提到的第三種情況,同一步有兩種填法,會造成分叉,所以,如果我們

要判斷乙個 w 是否可行,在從高位到低位確定 x,y 的過程中,就需要把這9

種狀態分別可不可能出現記下來,這是乙個 9 位的二進位制數。

如何用 dp 的方式算出可行的 w 的種數呢?dp 的狀態是當前已經考慮過

的位數和那個 9 位的二進位制數。時間複雜度 o(logt),常數為 512。

#include

#define ll long long

using

namespace

std;

const

int n=65;

ll t,l1,l2,r1,r2,f[n][1

<<9];

int cnt,g[3][3];

pair sta[9];

ll dfs(int i,int s)

return f[i][s]=res;

}int main()

吉利數字 數字dp

中國人喜歡數字6和8。特別地,一些人喜歡滿足含有特定個數6和8的數。現在請求出,在區間 l,r 之間的第k大的含有x個6和y個8的數。輸入的第一行包括4個數字,l,r,x,y。接下來的一行給出該組資料的詢問數q。接下來q行中,每行有乙個整數k。對於某個詢問,輸出一行,為對應的第k大的數。如果不存在這...

NOIP模擬 數字DP 准考證號

題目描述 clc noip2015 慘跪,他依稀記得他的准考證號是 37 其實是假的 現在clc又將要面臨一場比賽,他希望准考證號不出現 37 連續 同時他又十分討厭 4 所以也不希望 4 出現在准考證號中。現在他想知道在 a 和 b 之間有多少合法的准考證號 輸入格式 輸入包含兩個整數,a b。輸...

Nowcoder E 詭異數字(數字dp)

牛客小白月賽8真的打的自閉了,感覺一點都不小白 t t 肯定是我太菜了,沒錯就是這樣的 題目鏈結 題解說這是乙個非常簡單的數字dp,沒接觸過,感覺挺難的 大概這就是菜吧 先稍微了解了一下數字dp,附上寫的非常好的數字dp詳解 然後看懂了大佬的 敲了一下再附上了我的理解 includeusing na...