51nod 數字1的數量 數字DP

2021-07-23 10:53:41 字數 2030 閱讀 4213

給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。

例如:n = 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。

input

輸入n(1

<= n

<= 10^9)

output

輸出包含1的個數

input示例

12output示例

5

用乙個2維陣列表示從1~以為j開頭的有i位數的數字有多少個1.

狀態轉移方程就是:

j=1: dp[i][j]=dp[i-1][9]*2+pow(10,i-1);

(1,9]: dp[i][j]=dp[i-1][9]+dp[i][j-1];

還有需要注意的是:

從高位到地位:

如果高位為有1的話,我們還要加上高位以下所有數的1的數量即n%pow(10,i-1),

例如12345,從1開始我們統計1~10000中1的總數量,接著我們統計10001~12345中1的數量時,

其實是依次統計1~2000,1~300,1~40,1~5中1的數量,所以,如果高位有1的話,我們需要加上對應的數量的個數。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define fir first

#define sec second

#define fin freopen("/home/ostreambaba/文件/input.txt", "r", stdin)

#define fout freopen("/home/ostreambaba/文件/output.txt", "w", stdout)

#define mes(x, m) memset(x, m, sizeof(x))

#define pii pair

#define pll pair

#define inf 1e9+7

#define pi 4.0*atan(1.0)

#define mod 1000000007

#define lowbit(x) (x&(-x))

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define ls rt<<1

#define rs rt<<1|1

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

double eps = 1e-12;

const

int maxn = 1010;

using

namespace

std;

inline

int read()

while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();

return x*f;

}int dp[10][10];

int num[10];

void init()

else

dp[i][j]+=dp[i-1][9];}}

}int cacl(int t)

return k;

}int main()

}for(int i=k;i>=1;--i)

else

if(1==num[i])

else

}cout

<}

51Nod 1009 數字1的數量 數字dp

51nod 1009 數字1的數量 數字dp 給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。例如 n 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。輸入n 1 n 10 9 輸出包含1的個數 1位數的情況 大於等於1的時候,有1個,...

51nod 1009 數字1的數量 數字dp

基礎的數字dp,我不大會。數字dp的ppt 建議先看一下ppt,我是按照ppt裡面差不多的方式寫的,也參考了別人寫的。dp i j 表示長度為i位以j開頭的數字到1 閉區間 之間包含多少1 include include include using namespace std int dp 15 1...

51Nod 1009 數字1的數量 數字dp

給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。例如 n 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。input 輸入n 1 n 10 9 output 輸出包含1的個數 sample input 12sample output 5...