UVA11069 - A Graph Problem(DP)

来源:互联网 发布:ed2k关联软件 编辑:程序博客网 时间:2024/04/30 03:56

UVA11069 - A Graph Problem(DP)

题目链接

题目大意:给你n个点,要你找出有多少子串符合要求,首先没有连续的数字,其次不能再往里面添加任何的数字而不违反第一条要求。

解题思路:要发现每个数字选定后,之后可以有两种选择。所以f(n) = f(n + 2) + f(n + 3);边界:当无法往下添加数字的时候那么返回1.

代码:

#include <cstdio>#include <cstring>const int maxn = 100;int n;int dp[maxn];void init () {    memset (dp, 0, sizeof (dp));}int solve (int k) {    if (k + 2 > n)        return dp[k] = 1;    if (dp[k])        return dp[k];    int &ans = dp[k];    if (k + 2 <= n)        ans += solve(k + 2);    if (k + 3 <= n)        ans += solve(k + 3);    return ans;}int main () {    while (scanf ("%d", &n) != EOF) {        init();        int ans = solve(1);        if (n > 1)            ans += solve(2);        printf ("%d\n", ans);                    }    return 0;}
0 0
原创粉丝点击