爆肝!!!
2024-08-16 17:27:27
发布于:湖南
14阅读
0回复
0点赞
全场唯一一个用递推做的
#include <iostream>
#include <cstdio>
#define int long long
using namespace std;
int dp[25][25][25];
signed main(){
for(int i = 0; i <= 20; i++){
for(int j = 0; j <= 20; j++){
dp[0][i][j] = dp[i][0][j] = dp[i][j][0] = 1;//第一条
}
}
for(int i = 1; i <= 20; i++){
for(int j = 1; j <= i; j++){
for(int k = 1; k <= 20; k++){
dp[i][j][k] = dp[i - 1][j][k] + dp[i - 1][j - 1][k] + dp[i - 1][j][k - 1] - dp[i - 1][j - 1][k - 1];//第三条
}
}
for(int j = i + 1; j <= 20; j++){
for(int k = 1; k <= j; k++){
dp[i][j][k] = dp[i - 1][j][k] + dp[i - 1][j - 1][k] + dp[i - 1][j][k - 1] - dp[i - 1][j - 1][k - 1];//第三条
}
for(int k = j + 1; k <= 20; k++){
dp[i][j][k] = dp[i][j][k - 1] + dp[i][j - 1][k - 1] - dp[i][j - 1][k];//第四条
}
}
}
int n, m, k;
while(cin >> n >> m >> k){
if(n == -1 && m == -1 && k == -1) return 0;
printf("w(%lld, %lld, %lld) = ", n, m, k);
cout << (n < 0 || m < 0 || k < 0 ? 1 : (n > 20 || m > 20 || k > 20 ? dp[20][20][20] : dp[n][m][k])) << endl;
}
}
这里空空如也
有帮助,赞一个