51Nod 幸運數字(打表)

2021-07-23 15:05:08 字數 1118 閱讀 6708



1043 幸運號碼

基準時間限制:1

秒 空間限制:131072

kb 分值:

20難度:3級演算法題

1個長度為2n的數,如果左邊n個數的和 = 右邊n個數的和,那麼就是乙個幸運號碼。

例如:99、1230、123312是幸運號碼。

給出乙個n,求長度為2n的幸運號碼的數量。由於數量很大,輸出數量 mod 10^9 + 7的結果即可。

input

輸入n(1<= n <= 1000)
output

輸出幸運號碼的數量 mod 10^9 + 7
input示例

1
output示例

9

李陶冶(題目提供者)

用dp[i][j]表示i個數的和為j的總數,這裡面是包括0開頭的情形,有dp[i][j]=dp[i-1][j-k](k從0到9)。很好想,i個數組成總和為j的數量就來自於i-1個數 裡面能 在最前面加0到9的數字使得加完之後和為j。

這裡面包含了0開頭的,把0去掉的方法就是dp[i][j]-dp[i-1][j]。dp[i-1][j]就代表了在i個數中,開頭為0的個數,減去就是i個數中開頭不為0的個數。原因很明顯,i個數和為j與i-1個數和為j,就差了乙個位置為0。而這乙個位置因為一開始咱們的想法就是在最前面加的數字,所以這個位置就差在了最前面的位置上

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

#define maxn 10005

#define mod 1000000007

ll dp[2][maxn];

int main()

dp[i%2][j]=sum;

} }for(i=0;i<=9*n;i++)

ans=(ans+dp[n%2][i]*(dp[n%2][i]-dp[(n-1)%2][i])%mod)%mod;

printf("%lld\n",ans);

}

幸運數字 (打表 思路)

思路 打表你會發現1e9以內的數,有1022個幸運數,將他們存入陣列即可。然後查詢每乙個數的next l 的值 我們這裡是按幸運數來計算的,不需要遍歷所有的數 列印幸運數的思路 因為只有4和7,所以先記錄4,和7,並放入佇列中,從佇列中取乙個數,將它分別乘以4和7,小於1e9的記錄並放入佇列中,直到...

幸運號碼(51nod

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

51nod 1230 幸運數 數字dp

如果乙個數各個數字上的數字之和是質數,並且各個數字上的數字的平方和也是質數,則稱它為幸運數。例如 120是幸運數,因為120的數字之和為3,平方和為5,均為質數,所以120是乙個幸運數字。給定x,y,求x,y之間 包含x,y,即閉區間 x,y 有多少個幸運數。1 t 10000,1 x y 10 1...