您的位置:首页 > 其它

简单递推系列 uva习题

2013-11-06 11:04 309 查看
uva 11375 高精度加递推

主要是高精度加递推(主要思想还是参考liurujia书上)自己想了半天没有想出来。就不浪费时间了,理解后果断直接上模版。还犯了一个小错误wa一次0.0

//
//  BigNum.cpp
//  By Zhang xiaohao
//
//
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 1010
using namespace std;

struct BigNum{
char str[maxn];     //数字反着存方便运算
int len;

BigNum():len(0){
memset(str, 0, sizeof str);
}

BigNum operator+(BigNum &num)
{
BigNum ret;
for(int i=0, g=0; g || i<max(len, num.len); i++){
int ts = g;
if(i<len) ts+=(int)str[i]-'0';
if(i<num.len) ts+=(int)num.str[i]-'0';
g = ts/10;
ret.str[ret.len++] = ts%10+'0';
}
ret.str[ret.len] = '\0';
return ret;
}

BigNum operator+(int n)
{
BigNum num, ret;
sprintf(num.str, "%d", n);
num.len = strlen(num.str);
for(int i=0; i<num.len/2; i++){
swap(num.str[i], num.str[num.len-i-1]);
}
ret = num+*this;
return ret;
}

BigNum operator=(char c[]){
BigNum ret;
ret.len = strlen(c);
for(int i=ret.len-1; i>=0; i--){
ret.str[i] = c[i];
}
ret.str[len] = '\0';
return ret;
}

BigNum operator=(int num){
sprintf(this->str, "%d", num);
this->len = strlen(this->str);
for(int i=0; i<this->len/2; i++){
swap(this->str[i], this->str[this->len-i-1]);
}
return *this;
}
};

ostream& operator <<(ostream &out, const BigNum& x){
for(int i=x.len-1; i>=0; i--){
out << x.str[i];
}
return out;
}

istream& operator >>(istream &in, BigNum& x){
in >> x.str;;
x.len = strlen(x.str);
for(int i=0; i<x.len/2; i++){
swap(x.str[i], x.str[x.len-i-1]);
}
return in;
}

int n, c[] = {6,2,5,5,4,5,6,3,7,6};
BigNum dp[5010], sum[5010];

void init()
{
for(int i=0; i<maxn; i++)dp[i] = 0;
for(int i=0; i<maxn; i++)sum[i] = 0;
dp[0] = 1;
sum[0] = 0;
for(int i = 0; i<=2000; i++){
for(int j=0; j<10; j++){
if(!(i==0 && j==0) && i+c[j]<=2000) dp[i+c[j]] = dp[i]+dp[i+c[j]];
}
}
for(int i=1; i<=2000; i++){
sum[i] = sum[i-1]+dp[i];
if(i==6) sum[i] = sum[i]+1;
}
}

void debug()
{
for(int i=0; i<10; i++)
cout << dp[i] << endl;
}

int main()
{
//    freopen("in.txt", "r", stdin);

init();
while(scanf("%d", &n)!=EOF)
{
cout << sum
<< endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: