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