几乎裸的数位DP了,但是妈蛋的没用longlong啊 然后用了longlong之后DFS的返回还是int没改回来,wa了半天啊卧槽
不说了上代码
注意memset放在里面会tle
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
long long dp[55][55][55];
int N, K, M;
long long DFS( int n, int k, int m ){
if( k <= 0 ){
if( n == 0 ){
return 1;
}else{
return 0;
}
}
if( dp[n][k][m] != -1 ){
return dp[n][k][m];
}
long long ans = 0;
for( int i = 1; i <= m && i <= n; i++ ){
ans += DFS( n - i, k - 1, m );
}
// printf( "%d %d %d %d\n", n, k, m, ans );
return dp[n][k][m] = ans;
}
int main(){
int T, Case = 1;
memset( dp, -1, sizeof( dp ) );
scanf( "%d", &T );
while( T-- ){
scanf( "%d%d%d", &N, &K, &M );
printf( "Case %d: %lld\n", Case++, DFS( N, K, M ) );
}
return 0;
}