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 + 7input示例
1output示例
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...