HDU 1502
利用大数运算寻找字符A>=B>=C的数量
#include <iostream>
#include <cstring>
using namespace std;
const int N=123;
int dp[N][N][N][N];
int cnt=2;
int main() {
int n;
dp[0][0][0][1]=1;
for(int i=1;i<=60;i++) {
for(int j=0;j<=i;j++) {
for(int k=0;k<=j;k++) {
for(int p=1;p<cnt;p++) {
dp[i][j][k][p]+=dp[i-1][j][k][p];
if(j>0) dp[i][j][k][p]+=dp[i][j-1][k][p];
if(k>0) dp[i][j][k][p]+=dp[i][j][k-1][p];
dp[i][j][k][p+1]+=dp[i][j][k][p]/10;
dp[i][j][k][p]%=10;
}
while(dp[i][j][k][cnt]) {
dp[i][j][k][cnt+1]+=dp[i][j][k][cnt]/10;
dp[i][j][k][cnt]%=10;
cnt++;
}
if(i==j && j==k) {
dp[i][j][k][0]=cnt;
}
}
}
}
while(~scanf("%d",&n)) {
for(int i=dp[n][n][n][0]-1;i>=1;i--) {
cout<<dp[n][n][n][i];
}
printf("\n\n");
}
return 0;
}