AC日記 幸運號碼 51nod 1043

2022-05-14 06:17:14 字數 708 閱讀 7597

幸運號碼

思路:傳說中的數字dp;

不難發現,n(n<1000) ,那麼,n個數的最大和為9*1000=9000;

對於9000*1000的時間範圍,我們可以用dp來解決;

dp[i][j],表示第i為數總和為j的號碼的個數;

每個dp[i][j]都是dp[i-1][j-v](0<=v<=9) 的總和;

然後按照左邊的n和右邊的n,分為有前導0,和沒有前導0進行dp;

然後輸出排列的答案即可;

dp[1000][9000]*2會爆空間,所以我選擇壓掉i維;

來,上**:

#include #include 

#include

using

namespace

std;

#define ri 9005

#define mod 1000000007

long

long n,dp[9005],ans,f[9005

];int

main()

else

break

; }

f[j]=fpos,dp[j]=dpos;}}

for(int i=1;i<=9*n;i++) ans=(ans+(dp[i]*f[i])%mod)%mod;

cout

}

幸運號碼(51nod

1個長度為2n的數,如果左邊n個數的和 右邊n個數的和,那麼就是乙個幸運號碼。例如 99 1230 123312是幸運號碼。給出乙個n,求長度為2n的幸運號碼的數量。由於數量很大,輸出數量 mod 10 9 7的結果即可。題目解法 簡單dp 設出陣列dp dp i j 表示第i個數的和為j的個數 首...

51NOD 1043 幸運號碼

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

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