zoukankan      html  css  js  c++  java
  • UVA1638 杆子的排列 Pole Arrangement_dp题解

    好久没写题解了,今天心情好,,来写一发

    这道题是UVA上的题目。众所周知,UVA很卡,所以我实在洛谷上提交的^_^。  //p.s.洛谷真好用

    题目戳这里

    题意:一个队列中只能放入U和L,问存在连续3个以上U(危险组合)的个数为几个。

    思路:这道题中如果直接算有几组存在连续3个以上U的数量, 不是特别的方便,~~所实话就是我不会~~……

    所以可以考虑 _总组合数-安全组合=危险组合_ 的反向思路来做,这样就很容易地写出了dp的状态转移方程:

    dp[i]=dp[i-1]+dp[i-2]+dp[i-3];

    之后的代码就很好实现了!

     1 #include<bits/stdc++.h>//万能头文件
     2 using namespace std;
     3 typedef long long ll;
     4 const int INF=0x3f3f3f3f;
     5 const int Maxn=110;
     6 int n,ans;
     7 int dp[Maxn];
     8 int main(){
     9     while(scanf("%d",&n)!=EOF && n){ //不停地读入
    10         memset(dp,0,sizeof(dp));
    11         dp[1]=2;
    12         dp[2]=4;
    13         dp[3]=7;
    14         for(int i=4;i<=n;i++){
    15             dp[i]=dp[i-1]+dp[i-2]+dp[i-3]; //状态转移
    16         }
    17         ans=pow(2,n)-dp[n]; //最后减一下,答案就出来了
    18         printf("%d
    ",ans);
    19     }
    20     return 0;
    21 }
  • 相关阅读:
    Linux关机命令详解
    这二个月都在失眠中。
    GMAIL绑定自己的域名MX解析出现错误
    又上火了。
    FTP命令
    怎样做反向域名解析?
    linux 一些常用到的命令。
    LINUX怎么换IP。
    关于 MOD 和 \ 选择
    WIN2000和WIN2003连备份机的疑问
  • 原文地址:https://www.cnblogs.com/pengcheng-official/p/10478727.html
Copyright © 2011-2022 走看看