10721

dp,若当前状态为n, k, m则所求值即为n-i, k, m(i从1到m)的和

不过这题我RE了好多次,也不知道是什么原因,我试出来的结果是如果当前状态我已经求出,直接返回f[n][k]就RE,真迷茫

//============================================================================
// Name        : 10721.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

long long f[60][60];
int N, K, M;


long long dp(int n, int k, int m){
	if(n > k*m||n < k) return 0;
	if(n == k*m||n == k) return f[n][k] = 1;
	if(f[n][k] == -1){
		long long temp = 0;
		for(int i = 1;i <= m;i++){
			temp += dp(n-i, k-1, m);
		}
		f[n][k] = temp;
	}
	return f[n][k];
}

int main() {
	while(scanf("%d%d%d", &N, &K, &M)!=EOF){
		memset(f, -1, sizeof(f));
		printf("%lld\n", dp(N, K, M));
	}
	return 0;
}

posted @ 2011-05-25 14:45  KOKO's  阅读(334)  评论(0编辑  收藏  举报