pku1189 钉子和小球

本文深入探讨了数塔问题的动态规划解决方案,通过代码实现和详细解释,展示了如何使用动态规划解决递归问题,提高了算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://poj.org/problem?id=1189

DP,“数塔”

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int a[56][56];
 5 long long dp[56][56];
 6 
 7 long long gcd(long long x, long long y)
 8 {
 9     return y? gcd(y, x%y): x;
10 }
11 
12 
13 int main()
14 {
15     int i, j, k, n, m;
16     long long r;
17     char s[1234] = "\0";
18     memset(dp, 0, sizeof(dp));
19     scanf("%d%d%*c", &n, &m);
20     for(i=1; i<=n; i++)
21     {
22         gets(s);
23         k = 1;
24         for(j=0; s[j]; j++)
25         {
26             if(s[j]=='*')
27             {
28                 a[i][k] = 1;
29                 k ++;
30                 continue;
31             }
32             if(s[j]=='.')
33             {
34                 a[i][k] = 0;
35                 k ++;
36                 continue;
37             }
38         }
39     }
40     dp[1][1] = (long long)1<<56;
41     //printf("%lld\n", dp[1][1]);
42     for(i=1; i<=n; i++)
43     {
44         for(j=1; j<=i; j++)
45         {
46             if(a[i][j])
47             {
48                 dp[i+1][j] += (dp[i][j]>>1);
49                 dp[i+1][j+1] += (dp[i][j]>>1);
50             }
51             else
52             {
53                 dp[i+2][j+1] += dp[i][j];
54             }
55             //printf("%lld ", dp[i][j]);
56         }
57         //printf("\n");
58     }
59     r = dp[i][m+1];
60     if(r == 0)
61     {
62         printf("0/1\n");
63         return 0;
64     }
65     if(gcd(dp[1][1], r)==1)
66     {
67         printf("%lld\n", r);
68         return 0;
69     }
70     printf("%lld/%lld\n", (long long)r/gcd(dp[1][1], r), (long long)dp[1][1]/gcd(dp[1][1], r));
71     return 0;
72 }

 

转载于:https://www.cnblogs.com/yuan1991/archive/2013/01/20/pku1189.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值