數字DP 度的數量

2022-01-10 13:09:37 字數 875 閱讀 8119

題面:

大意:求給定區間 \([x,y]\) 中滿足下列條件的整數個數:這個數恰好等於 \(k\) 個互不相等的 \(b\) 的整數次冪之和。

dp(x)表示從 \(0-x\) 滿足題意的數的個數。

那麼接下來分情況討論以分解問題:(設 \(x\) 有 \(n\) 位,在這裡我們記最高位對應下標為 \(n-1\), 個位是 \(0\) ,同時記當前已經放了last個 \(1\) (那麼當前還可以放置k-last個 \(1\)))

設當前位對應的下標是 \(i\)

這樣我們便可以一層一層地向下計算下去了。

注意,在上圖粉色部分是最後沒有統計的,需要特殊考慮一下。

個人心得:做數字dp要時刻記得自己是對整個區間的數進行考慮,而不是單個數,並且在解題的時候要保證合理分劃狀態,保證統計時候的正確性。

#includeusing namespace std;

const int n=35;

//預處理求出組合數

int c[n][n];

void init()

int k,b;

int l,r;

int dp(int n)else

}if(i==0 && k==last) res++; //如果到了最後一位

}return res;

}int main()

Acwing 1081 度的數量 數字dp

題目大意 求給定區間 x,y 中滿足下列條件的整數個數 這個數恰好等於 k 個互不相等的 b 的整數次冪之和。例如,設 x 15,y 20,k 2,b 2,則有且僅有下列三個數滿足題意 17 24 20 18 24 21 20 24 22 輸入格式 第一行包含兩個整數 x 和 y,接下來兩行包含整數...

演算法題 數字DP 度的數量(Python)

求給定區間 x,y 中滿足下列條件的整數個數 這個數恰好等於 k 個互不相等的 bb 的整數次冪之和。例如,設 x 15,y 20,k 2,b 2,則有且僅有下列三個數滿足題意 17 2 4 2 0 18 2 4 2 1 20 2 4 2 2 輸入格式 第一行包含兩個整數 x 和 y,接下來兩行包含...

AcWing1081 度的數量(數字dp)

對於數字dp的題目,我學習的是y總的模板,也就是說把所有數先用拆位後考慮從頭開始考慮,形成乙個樹的形狀 左分支為填0 ai 1的情況,這列情況一般可以通過數學公式一次性求出,之後右分支就填當前數,這樣向下延申,在最後特判右分支的情況,也就是乙個數 對於數字dp,一般儲存兩個量,乙個是個數,乙個是la...