标签:描述 for i++ pac span [1] 数字 才有 names
【题目描述】 在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。 【输入】 读入一个数N。 【输出】 输出有多少个数中有偶数个数字3。 【输入样例】 2 【输出样例】 73
#include <bits/stdc++.h> using namespace std; int main() { int a[10000],b[10000]; a[1]=8; b[1]=1; for(int i=2;i<10000;i++) { a[i]=(9*a[i-1]+b[i-1])%12345; b[i]=(9*b[i-1]+a[i-1])%12345; } int n; cin>>n; cout<<a[n]<<endl; return 0; }
这个题目,不能用递归写,会超时,还是老老实实dp吧~
设a[i]为i位时有偶数个3,b[i]是i位时有奇数个3
当i=1时,注意,dp一般从最高位算起,所以慢慢打表下来是加的低位,a[1]=8(0不包括),b[1]=1,
所以在打表递推的时候进行分类讨论:
1.若n-1位为奇数个3,则n位就应该加3,这样才有偶数个3
2.若n-1位为偶数个3,则n位应该不为3,有9种情况 ,这样才有偶数个3
所以递推公式就出来了~
标签:描述 for i++ pac span [1] 数字 才有 names
原文地址:https://www.cnblogs.com/liufei-/p/10017891.html