zoj2711 Regular Words(DP)

/*
 考虑二维的状况:
 如果 A>=B 则在 F( A-1, B )后面放上A,在F(A,B-1)后面放上B
  F( A, B ) = F( A, B-1 ) + F( A-1, B ) { A > B }
  当 A = B 时 也满足  F( A, B ) = F( A, B-1 ) + F( A-1, B )
           = F( A, B-1 ) + 0
  所以有: F( A, B ) = F( A, B-1 ) + F( A-1, B ) { A >= B }
 考虑三维的状况:
  F( A,B, C ) = F( A-1, B, C ) + F( A, B-1, C-1 ) + F( A, B , C-1 ) {A >= B >= C}
*/

ContractedBlock.gif ExpandedBlockStart.gif View Code
 1 #include <stdio.h>
2 #include <string.h>
3
4 char ABC[ 61 ][ 61 ][ 61 ][ 82 ];
5
6 int main()
7 {
8 memset( ABC, 0, sizeof( ABC ) );
9 for ( int A = 1 ; A <= 60 ; ++ A )
10 ABC[ A ][ 0 ][ 0 ][ 0 ] = 1;
11
12 for ( int A = 1 ; A <= 60 ; ++ A )
13 for ( int B = 1 ; B <= 60 ; ++ B )
14 if ( A >= B )
15 for ( int k = 0 ; k <= 80 ; ++ k ) {
16 ABC[ A ][ B ][ 0 ][ k ] += ABC[ A-1 ][ B ][ 0 ][ k ] + ABC[ A ][ B-1 ][ 0 ][ k ];
17 if ( ABC[ A ][ B ][ 0 ][ k ] > 9 ) {
18 ABC[ A ][ B ][ 0 ][ k+1 ] += ABC[ A ][ B ][ 0 ][ k ]/10;
19 ABC[ A ][ B ][ 0 ][ k ] %= 10;
20 }
21 }
22
23 for ( int A = 1 ; A <= 60 ; ++ A )
24 for ( int B = 1 ; B <= 60 ; ++ B )
25 for ( int C = 1 ; C <= 60 ; ++ C )
26 if ( A >= B && B >= C )
27 for ( int k = 0 ; k <= 80 ; ++ k ) {
28 ABC[ A ][ B ][ C ][ k ] += ABC[ A-1 ][ B ][ C ][ k ] + ABC[ A ][ B-1 ][ C ][ k ] + ABC[ A ][ B ][ C-1 ][ k ];
29 if ( ABC[ A ][ B ][ C ][ k ] > 9 ) {
30 ABC[ A ][ B ][ C ][ k+1 ] += ABC[ A ][ B ][ C ][ k ]/10;
31 ABC[ A ][ B ][ C ][ k ] %= 10;
32 }
33 }
34
35 int n;
36 while ( scanf("%d",&n) != EOF ) {
37 int start = 80;
38 while ( !ABC[ n ][ n ][ n ][ start ] && start > 0 ) -- start;
39 while ( start >= 0 )
40 printf("%d",ABC[ n ][ n ][ n ][ start -- ]);
41 printf("\n\n");
42 }
43 return 0;
44 }

转载于:https://www.cnblogs.com/-xiaobai-/archive/2011/08/17/2143088.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值