UVa580 Critical Mass

DP计算没有连续的三个L的方案数,用总方案数减去不连续的方案数就是答案。

设dp[第i个][序列末尾有j个L]=方案数。

暴力转移,具体看代码。

 

 1 /*by SilverN*/
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 #define LL long long
 8 using namespace std;
 9 LL dp[600][4];
10 LL ans[600];
11 LL total;
12 int main(){
13     int i,j;
14     dp[1][0]=1;
15     dp[1][1]=1;
16     for(i=1;i<=30;i++){
17         dp[i][1]+=dp[i-1][0];
18         dp[i][2]+=dp[i-1][1];
19         dp[i][0]+=dp[i-1][0]+dp[i-1][1]+dp[i-1][2];
20     }
21     total=1;
22     for(i=1;i<=30;i++){
23         total<<=1;
24         ans[i]=total-dp[i][0]-dp[i][1]-dp[i][2];
25     }
26     int n;
27     while(scanf("%d",&n) && n){
28         printf("%d\n",ans[n]);
29     }
30     return 0;
31 }

 

转载于:https://www.cnblogs.com/SilverNebula/p/5901329.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值