心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
和Ural 1009一样,不过需要用到高精度,而且规模比之前大了不少,用了记忆化。
一开始测试数据的时候试了一个“10 170”的数据,发现结果很小,以为开100的数组应该够了。后来才发现我n和k弄反了!WA了一次!
给出“170 10”这个数据的结果,共170位。可以与自己的结果进行比对:
19140929114881653462
47604168411662739155
92368455809094944920
16732196087599513580
59650868133939742570
53930574840609094661
65965897483835868175
67975397667274771543
2612675930
以下是我的代码:
#include<iostream>
#include
<string.h>
#define max_digit 177
#define maxn 187
using namespace std;
typedef 
struct
{
    
long n,s[max_digit];
}bign;
const bign nil={1,{-1}};
long n,k;
bign d[maxn][
2];

void Add(bign &c,bign &a,bign &b)
{
    memset(c.s,
0,sizeof(c.s));
    c.n
=(a.n>b.n?a.n:b.n);
    
for(long i=0;i<c.n;i++)
    {
        c.s[i]
+=a.s[i]+b.s[i];
        
if(c.s[i]>=10)
        {
            c.s[i]
-=10;
            c.s[i
+1]++;
        }
    }
    
if(c.s[c.n]) c.n++;
}
void Mul(bign &c,long t,bign &a)
{
    memset(c.s,
0,sizeof(c.s));
    c.n
=a.n;
    
for(long i=0;i<c.n;i++)
        c.s[i]
=t*a.s[i];
    
for(long i=0;i<c.n;i++)
        
if(c.s[i]>=10)
        {
            c.s[i
+1]+=c.s[i]/10;
            c.s[i]
%=10;
        }
    
if(c.s[c.n]) c.n++;
}
void Print(bign &a)
{
    
for(long i=a.n-1;i>=0;i--)
        cout
<<a.s[i];
}

void dp(long i,long j)
{
    
if(d[i][j].n!=1||d[i][j].s[0]!=-1return;
    
if(i==1)
    {
        dp(i
+1,1);
        Mul(d[i][j],k
-1,d[i+1][1]);
        
return;
    }
    
if(i==n)
    {
        
if(j)
        {d[i][j].n
=1;d[i][j].s[0]=k;}
        
else
        {d[i][j].n
=1;d[i][j].s[0]=k-1;}
        
return;
    }
    
if(j)
    {
        bign t;
        dp(i
+1,1);Mul(t,k-1,d[i+1][1]);
        dp(i
+1,0);Add(d[i][j],t,d[i+1][0]);
    }
    
else
    {
        dp(i
+1,1);
        Mul(d[i][j],k
-1,d[i+1][1]);
    }
}
int main()
{
    
/*
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);
    //
*/
    cin
>>n>>k;
    
for(long i=0;i<=n;i++)
        d[i][
0]=d[i][1]=nil;
    dp(
1,1);
    Print(d[
1][1]);
    cout
<<endl;
return 0;
}


posted on 2010-09-10 13:57 lee1r 阅读(375) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:动态规划

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理