让我匪夷所思.想了二十多分钟后只想到了dp,所以果断开写,嗯,开个数组dp[MAX][MAX]预处理.我了个擦,不曾想数据一大就挂了.然后回头改了long long,交了还是
WA掉,这时我开始怀疑自己的思路了.然后酝酿了检测发现到了300+以后long long 也爆了!我靠,尼玛还要写大整数,开始想用4个long long存一个数就好了,后来
left_swift函数写出来,跑不粗结果,于是整个人都不好了...唉,好桑心,试着随便写了个结构体搞一搞,搞不出结果,作罢,改日再搞,特此留练.
竟然爆Longlong,爆longlong,爆longlong,,,爆...wo xiang shuo zang hua a . . . a . . a . . . a. .. .
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int MAX = 601;
const int LEN = 40;
struct bigInt {
int num[LEN]; //大整数
int bit;
bigInt(){ memset(num, 0, sizeof(num)); bit = 0; }
bigInt(int _init){
memset(num, 0, sizeof(num));
bit = 0;
while (_init > 0) {
num[bit++] = _init % 10;
_init /= 10;
}
}
bigInt(bigInt& B) {
memset(num, 0, sizeof(num));
bit = 0;
for (;bit < B.bit; ++bit) {
num[bit] = B.num[bit];
}
}
int& operator[](int index) {
return num[index];
}
bigInt operator+(bigInt B) {
bigInt tmp;
int i;
for (i = 0; i < std::max(bit, B.bit); ++i) {
tmp[i] = num[i] + B.num[i];
if (tmp[i] > 10) {
tmp[i+1]++;
tmp[i] -= 10;
}
}
tmp.bit = i + 2;
while (!tmp[tmp.bit]) --tmp.bit;
return tmp;
}
bigInt& operator+=(bigInt B) {
int i;
for (i = 0; i < std::max(bit, B.bit); ++i) {
num[i] += B[i];
if (num[i] > 10) {
num[i] -= 10;
num[i+1]++;
}
}
bit = i + 2;
while (!num[bit]) --bit;
return *this;
}
bigInt& operator=(int _num) {
memset(num, 0, sizeof(num));
bit = 0;
while (_num) {
num[bit++] = _num%10;
_num /= 10;
}
return *this;
}
friend ostream& operator<<(ostream& o, bigInt A) {
for (int i = A.bit-1; i >= 0; --i) o << A[i];
}
};
bigInt dp[MAX][MAX]; //配一个可以存100位整数的数组...
void init(void) {
memset(dp, 0, sizeof(dp));
for (int i = 0; i < MAX; ++i) dp[0][i] = 1;
for (int i = 1; i < MAX; ++i) {
for (int j = 0; j <= (i>>1); ++j) {
for (int k = 1; k <= j; ++k)
dp[i][j] += dp[i-j][k];
}
for (int j = (i>>1)+1; j <= i; ++j) {
dp[i][j] = dp[i-j][0];
dp[i][0] += dp[i][j];
}
// printf("i = %d", i);
// puts("");
}
//for (int i = 0; i < 10; ++i) {
// cout << "i = " << i << ", dp[i][0] = " << dp[i][0] << endl;
//}
}
int main() {
int n;
init();
while (~scanf(" %d", &n) && n) {
for (int i = dp[n][0].bit-1; i >= 0; --i) {
printf("%d", dp[n][0][i]);
}
puts("");
}
return 0;
}
toj1746_备份_未AC_跪了_
最新推荐文章于 2018-09-26 22:38:18 发布