【OpenJudge9272】【DP】偶数个数字3
偶数个数字3
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB
【描述】
在所有的N位数中,有多少个数中有偶数个数字3?
【输入】
一行给出数字N,N<=1000
【输出】
如题
【样例输入】
2
【样例输出】
73
【Solution】
用dp[i][1]表示i位数有奇数个三的数量,dp[i][0]表示有偶数个三的数量。dp[i][1]可以从dp[i-1][1]首位添加0 1 2 4 5 6 7 8 9和dp[i-1][0]首位添加3转移,dp[i][0]同理。注意当i==N时首位不能添加0。
AC代码:
1 #include <cstdio> 2 int N; 3 int dp[1010][2]; 4 int main(){ 5 scanf("%d",&N); dp[1][1]=1; dp[1][0]=9; 6 for(int i=2;i<=N;++i){ 7 int k=i==N?8:9; 8 dp[i][0]=dp[i-1][0]%12345*k+dp[i-1][1]%12345; 9 dp[i][1]=dp[i-1][1]%12345*k+dp[i-1][0]%12345; 10 } 11 printf("%d",dp[N][0]%12345); 12 return 0; 13 }