您的位置:首页 > 其它

XDOJ1260 - 递推1

2014-08-28 21:52 369 查看
Description

在所有的N位数中,有多少个数中有偶数个数字3?

Input
多组数据,每行一个数N(N<=1000)
Output
每行输出一个数,答案mod12345
Sample Input
2
Sample Output
73
解题思路:
源于网上,自己太菜T_T。
以f(n,0)表示n位数中偶数个3的数字有多少,f(n,1)表示n位数中奇数个3的数字有多少。
其中f(1,0)=8(为了递推方便去掉了0,因为0不能做一个多位数的第一位),f(1,1)=1
考虑n的情况,n位数可以通过在n-1位数的最后面添加一位(0~9)得到,如果添加的是3,那么n-1位中原来奇数个3的数变成偶数个3,原来偶数个3的变成奇数个3;如果添加不是3,那么3的奇偶性不变。
所以
f(n,0) = 9*f(n-1,0)+f(n-1,1)
f(n,1) = 9*f(n-1,1)+f(n-1,0)
#include<iostream>
using namespace std;
const int INF = 1000000000;
const int M = 12345;
const int D = 1000;
long long f[D+1][2];
void init()
{
f[1][0] = 8;
f[1][1] = 1;
for(int i=2;i<=D;++i)
{
f[i][0] = f[i-1][1]+9*f[i-1][0];
f[i][1] = f[i-1][0]+9*f[i-1][1];
if(f[i][0]>INF)
f[i][0]%=M;
if(f[i][1]>INF)
f[i][1]%=M;
}
}
int main()
{
int n;
init();
while(cin>>n)
{
if(n==1)
cout<<9<<endl;
else
cout<<f
[0]%M<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: