數字DP 槓桿數

2021-10-09 18:18:20 字數 1077 閱讀 1666

題目描述

如果把乙個數的某一位當成支點,且左邊的數字到這個點的力矩和等於右邊的數字到這個點的力矩和,那麼這個數就可以被叫成槓桿數。

比如4139就是槓桿數,把3當成支點,我們有這樣的等式:4 * 2 + 1 * 1 = 9 * 1。

給定區間[x,y],求出在[x,y]中有幾個槓桿數。

輸入格式

兩個數,表示x,y。

輸出格式

乙個輸出,表示區間[x,y]中槓桿數的個數。

輸入輸出樣例

輸入 #1 複製

7604 24324

輸出 #1 複製

897說明/提示

對於40%的資料,x<=y<=x+100000

對於100%的資料,1<=x<=y<=10^18

數字dp

我們可以列舉支點的位置,對於每個滿足條件的數,它所對應的支點是唯一的,原因是如果將支點右移,左邊減去右邊的差將嚴格單調增加。state表示力矩和(支點左邊加支點右邊),所以當state<0時,當前這個數不滿足以i為支點成為槓桿數的情況,返回0。但當state==0時並不能就ans++了,因為當前列舉的位置可能還沒列舉完。

列舉好支點,問題就轉化為:求[1,x]中,以第i位為支點的槓桿數的個數。

#include

#define ll long long

using

namespace std;

const

int n=20;

ll f[n]

[n][

3000];

int a[n]

;ll dfs

(int pos,

int p,

int s,

bool bz)

ll solve

(ll x)

ll ans=0;

for(

int i=

1; i<=len; i++

) ans+

=dfs

(len,i,0,

1);return ans-len+1;

}int

main()

windy 數(還是數字dp

windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。windy想知道,在a和b之間,包括a和b,總共有多少個windy數?input 包含兩個整數,a b。output 乙個整數 sample input 輸入樣例一 110 輸入樣例二 2550 sam...

數字DP入門 數字DP模板

數字dp是一種計數用的dp,一般就是要統計乙個區間 le,ri 內滿足一些條件數的個數。所謂數字dp,字面意思就是在數字上進行dp咯。數字還算是比較好聽的名字,數字的含義 乙個數有個位 十位 百位 千位.數的每一位就是數字啦!之所以要引入數字的概念完全就是為了dp。數字dp的實質就是換一種暴力列舉的...

數字dp模版(dp)

1 include 2 include 3 include 4 include 5 6using namespace std 78 intt 9long long dp 19 19 2005 10 long long l,r 11int shu 20 12 13long long dfs int l...