動態規劃 數字DPwindy

2022-06-03 07:06:10 字數 820 閱讀 9033

#include//

#include

//#include

using

namespace

std;

#define ll long long

const

int maxn=2e9+10

;ll f[

20][20]; //

設f[i,j]表示由前i位數字構成且最高位數字為j的windy數有多少個

ll a[20

];void init() //

預處理f[i,j]陣列

}}int fun(ll t) //

這個來求[1-t]區間之間有多少winfy數

ll sum=0; //

首先,求位數小於這個數的所有windy數

for(int i=1; i)

for(int j=1; j<=9; j++)

sum+=f[i][j];

//求位數等於這個數,最高位小於這個數的最高位的windy數

for(int i=1; i)

sum+=f[len][i];

for(int i=len-1; i>=1; i--)

if(abs(a[i+1]-a[i])<2

)

break

;

if(i==1)++sum; //

這裡注意如果最後一位也滿足與上一位差值》=2,需要+1

}

return

sum;

}int

main()

數字動態規劃

如果發現有些數字題目需要處理的資料多,而且單個數處理數字計數時會隨著數的變大越來越麻煩 通常都這樣 就適合這種方法或者這種思想解決問題。因為通常遇到這方面的題目通常會考察乙個連續區間內符合某條件的數,這樣可以將單個數的位操作合一,直接看題目條件內所有的數的條件符合情況,即直接處理所有數可能的所有位以...

解碼數字 動態規劃

題意 a用1表示,b用2表示,z用26表示 請問對給定的一串數字,說明有幾種解碼成字母的方式。例如,123可解碼成abc,lc,aw三種方式。分析 此問題有最右子問題,即如果當前位i和前一位i 1能組成小於等於26的兩位數,那麼前i個數字的解碼方式等於前i 2個數字的解碼方式加上前i 1個數字的解碼...

演算法 動態規劃 數字DP Leo Jose

我leo jose終於會用markdown寫部落格了 數字dp是一種計數用的dp,用來統計乙個區間 left,right 內滿足某些條件的數的個數。所謂數字dp,字面意思就是在數字上進行dp 實質就是優雅一點的暴力列舉,使其滿足dp的性質,然後記憶化 對於乙個求區間中滿足條件數的個數,最簡單暴力如下...