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;
}

浙公网安备 33010602011771号