51nod 1043 幸運號碼(數字dp)

2021-09-23 18:50:17 字數 940 閱讀 3979

51nod-1043 幸運號碼

數字dp

用dp[i][j] 表示長度為 i,和為 j 的所有情況(包含前導零)。

狀態轉移方程:dp[

i][j

]=∑d

p[i−

1][j

−k](

0<=k

<=9

)dp[i][j] = \sum (0 <= k <= 9)

dp[i][

j]=∑

dp[i

−1][

j−k]

(0<=k

<=9

)最後結果根據乘法法則

應該是左邊的情況 * 右邊的情況,不過要注意左邊的情況減去前導零。

#include

#define inf 0x3f3f3f3f

#define d(x) cout << (x) << endl

#define lson l, m, rt<<1

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

using namespace std;

typedef

long

long ll;

const

int mod =

1e9+7;

const

int n =

1e3+10;

int n, ans =0;

ll dp[n]

[n *10]

;//dp[i][j]: 左邊長度為i, 和為j, 的數量

intmain()

}}}for

(int i =

0; i <=

9* n; i++

)printf

("%lld\n"

, ans)

;return0;

}

51nod 1043 幸運號碼 (數字dp)

dp i j 表示 i 個數和為 j 的總數 包含0開頭情況 dp i j dp i 1 j k i 1 這裡用滾動陣列節省記憶體 非0開頭的情況 0開頭的情況 dp n 1 i dp n 1 1 i dp n 1 i 最後將其累加即為結果。開始沒有想到這麼做,還傻傻的dfs,用dp 1000 10...

51Nod 1043 幸運號碼 數字DP

1043 幸運號碼 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 1個長度為2n的數,如果左邊n個數的和 右邊n個數的和,那麼就是乙個幸運號碼。例如 99 1230 123312是幸運號碼。給出乙個n,求長度為2n的幸運號碼的數量。由於數量很大,輸出數量 mod...

51 nod 1043 幸運號碼 數字DP

1043 幸運號碼 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 1個長度為2n的數,如果左邊n個數的和 右邊n個數的和,那麼就是乙個幸運號碼。例如 99 1230 123312是幸運號碼。給出乙個n,求長度為2n的幸運號碼的數量。由於數量很大,輸出數量 mod...