UVA10943 - How do you add?(DP)

来源:互联网 发布:朋友圈制作软件 编辑:程序博客网 时间:2024/05/19 03:19

UVA10943 - How do you add?(DP)

题目链接

题目大意:给你N和K,要求找出这样的K个数(小于等于N),和等于N,问有多少种结果模上1e6。

解题思路:dp。

代码:

#include <cstdio>#include <cstring>const int maxn = 105;const int MOD = 1e6;typedef long long ll;ll dp[maxn][maxn];int N, K;void init () {    memset (dp, -1, sizeof (dp));}ll DP (int k, int sum) {    ll& ans = dp[k][sum];    if (ans != -1)        return ans;    if (k == K) {        if (sum == N)            return ans = 1;        return ans = -2;    }    ll tmp;    ans = 0;    for (int i = 0; i <= N; i++) {        if (sum + i <= N) {            tmp = DP(k + 1, sum + i);            if (tmp != -2)                ans = (ans + tmp) % MOD;             } else             break;    }    if (ans == 0)        return ans = -2;    return ans;}int main () {    while (scanf ("%d%d", &N, &K) && (N || K)) {        init();        printf ("%lld\n", DP(0, 0));    }    return 0;}
0 0
原创粉丝点击