简单递推系列 uva习题
2013-11-06 11:04
309 查看
uva 11375 高精度加递推
主要是高精度加递推(主要思想还是参考liurujia书上)自己想了半天没有想出来。就不浪费时间了,理解后果断直接上模版。还犯了一个小错误wa一次0.0
View Code
主要是高精度加递推(主要思想还是参考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
相关文章推荐
- 经典第五章 习题 5-3 UVA 10935 Throwing cards away I(队列的简单应用)
- HDU 2042 不容易系列之二【简单递推】
- 基本计数方法系列 uva习题
- UVA 550 Multiplying by Rotation (简单递推)
- python 简单习题系列1
- 习题7-2 UVA - 225 Golygons (简单的暴力回溯法+剪枝)
- 习题4-4 uva253骰子涂色简单题解(更新至简洁21行)
- uva 11457 Tennis contest(概率,递推, 简单题)
- python简单习题系列2
- python简单习题系列4
- python简单习题系列6
- python简单习题系列3
- 不容易系列之(3)—— LELE的RPG难题 简单递推
- A - 不容易系列之(3)―― LELE的RPG难题 简单递推
- python 简单习题系列5
- 习题4-1象棋uva1589简单题解
- UVa 11000 简单递推
- hdoj 2045 不容易系列之(3)—— LELE的RPG难题 解题报告(简单递推)
- 递推关系的运用加简单DP【UVA11137Ingenuous Cubrency】-------2015年1月27日
- uva11375火柴递推之多状态转移递推