UVALive 4235 Recursively Palindromic Partitions

来源:互联网 发布:博易大师画横虚线源码 编辑:程序博客网 时间:2024/05/16 04:50

http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2236


dp[i]: as i has dp[i] RPP

and 

dp[i] = dp[i / 2] + $\sum_{j = 1}^{i}dp[(n - i) / 2]$

#include <cstdio>#include <cstdlib>#include <iostream>#include <cstring>#include <string>#include <vector>#include <map>#include <algorithm>#include <cctype>#include <queue>#include <stack>using namespace std;#define Rep(c, a, b) for (int c = (a); c < (b); c++)#define Nre(c, a, b) for (int c = (a); c > (b); c--)#define MAXN (1100)typedef long long LL;int dp[MAXN];int DFS(int n){if (dp[n]) return dp[n];if (n == 0) return dp[n] = 1;if (n == 1) return dp[n] = 1;int res = 0;if (n % 2 == 0) res += DFS(n / 2);Rep(i, 1, n + 1) if ((n - i) % 2 == 0)res += DFS((n - i) / 2);return dp[n] = res;}int main(){int T, n, Cas = 1;Rep(i, 1, 1001) DFS(i);scanf("%d", &T);while (T--) scanf("%d", &n), printf("%d %d\n", Cas++, dp[n]);return 0;}