【HDOJ】1502 Regular Words

时间:2023-03-09 02:48:32
【HDOJ】1502 Regular Words

大数+DP,感觉这个DP有点儿抽象,而且这个是大数,wa了很多次。

#include <stdio.h>

#define MAXNUM 61
#define MAXLEN 100 typedef struct {
char val[MAXLEN];
} src_st; src_st dp[MAXNUM][MAXNUM][MAXNUM]; void BigIntAdd(src_st *a, src_st *b) {
int i; for (i=; i<MAXLEN; ++i) {
a->val[i] += b->val[i];
if (a->val[i] >= ) {
a->val[i+]++;
a->val[i] -= ;
}
}
} int main() {
int i, j, k; dp[][][].val[] = ; for (i=; i<MAXNUM; ++i)
for (j=; j<=i; ++j)
for (k=; k<=j; ++k) {
memset(dp[i][j][k].val, , sizeof(dp[i][j][k].val));
if (i->=j)
BigIntAdd(&dp[i][j][k].val, &dp[i-][j][k].val);
if (j->=k)
BigIntAdd(&dp[i][j][k].val, &dp[i][j-][k].val);
if (k)
BigIntAdd(&dp[i][j][k].val, &dp[i][j][k-].val);
} while (scanf("%d", &k) != EOF) {
j = ;
for (i=MAXLEN-; i>=; i--) {
if (j== && dp[k][k][k].val[i] == )
continue;
if (j== && dp[k][k][k].val[i] != )
j = ;
printf("%c", dp[k][k][k].val[i]+'');
}
printf("\n\n");
} return ;
}