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...