UVA580-Critical Mass

题意

有两种方块,L和U,有至少三个连续的U称为危险组合,问有多少个危险组合

solution:

至少这个概念比较难求 ,所以转化为(1ll<<n)-安全组合

dp[n][i]表示前n个数里以i个U结尾的个数

递推方程

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

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
#include<queue>
#include<cstring>
#define mp make_pair
#define pb push_back
#define first fi
#define second se
#define pw(x) (1ll << (x))
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define rep(i,l,r) for(int i=(l);i<(r);i++)
#define per(i,r,l) for(int i=(r);i>=(l);i--)
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
#define eps 1e-9
#define PIE acos(-1)
#define cl(a,b) memset(a,b,sizeof(a))
#define fastio ios::sync_with_stdio(false);cin.tie(0);
#define lson l , mid , ls
#define rson mid + 1 , r , rs
#define ls (rt<<1)
#define rs (ls|1)
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define freopen freopen("in.txt","r",stdin);
#define cfin ifstream cin("in.txt");
#define lowbit(x) (x&(-x))
#define sqr(a) a*a
#define ll long long
#define ull unsigned long long
#define vi vector<int>
#define pii pair<int, int>
#define dd(x) cout << #x << " = " << (x) << ", "
#define de(x) cout << #x << " = " << (x) << "\n"
#define endl "\n"
using namespace std;
//**********************************
const int maxn=;
int n;
ll dp[][];
//**********************************
void Init()
{
cl(dp,);
dp[][]=dp[][]=dp[][]=dp[][]=;dp[][]=;
FOR(i,,){
dp[i][]=dp[i-][]+dp[i-][]+dp[i-][];
dp[i][]=dp[i-][];
dp[i][]=dp[i-][];
// dd(i);dd(dp[i][0]);dd(dp[i][1]);de(dp[i][2]);
}
}
//**********************************
int main()
{
Init();
while(cin>>n,n){
ll ans=;
ans=dp[n][]+dp[n][]+dp[n][];
printf("%lld\n",(1ll<<n)-ans);
}
return ;
}

第二种实现方法

dp[i+j][1]+=dp[i][0];

dp[i+j][0]+=dp[i][1];

     /*************************************************************************
> File Name: a.cpp
> Author: QWX
> Mail:
> Created Time: Sun 30 Sep 2018 04:01:42 AM PDT
************************************************************************/ //{{{ #include
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#include<string>
#include<cstring>
#include<complex>
#include<bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define first fi
#define second se
#define pw(x) (1ll << (x))
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define rep(i,l,r) for(int i=(l);i<(r);i++)
#define per(i,r,l) for(int i=(r);i>=(l);i--)
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
#define eps 1e-9
#define PIE acos(-1)
#define cl(a,b) memset(a,b,sizeof(a))
#define fastio ios::sync_with_stdio(false);cin.tie(0);
#define lson l , mid , ls
#define rson mid + 1 , r , rs
#define ls (rt<<1)
#define rs (ls|1)
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define dd(x) cout << #x << " = " << (x) << ","
#define de(x) cout << #x << " = " << (x) << "\n"
#define endl "\n"
using namespace std;
//}}} ll dp[][];
int n; int main()
{
dp[][]=dp[][]=;
FOR(i,,){
FOR(j,,)dp[i+j][]+=dp[i][];
FOR(j,,)dp[i+j][]+=dp[i][];
}
while(cin>>n,n)cout<<(1ll<<n)-dp[n][]-dp[n][]<<endl;
return ;
}

类似题目

The Debut Album

题意:

给你一个串的长度n,串由1,2组成,1连续不超过a个,2连续不超过b个,问有多少种这样的串,对1e9+7取模。

solution:

递推方程

往后补值:dp[i+j][1]+=dp[i][0];

     dp[i+j][0]+=dp[i][1];

向前取值:dp[i][1]+=dp[j][0];

     dp[i][0]+=dp[j][1];

 /*************************************************************************
> File Name: j.cpp
> Author: QWX
> Mail:
> Created Time: Fri 05 Oct 2018 08:58:42 PM PDT
************************************************************************/ //{{{ #include
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#include<string>
#include<cstring>
#include<complex>
//#include<bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define first fi
#define second se
#define vi vector<int>
#define pii pair<int,int>
#define pw(x) (1ll << (x))
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define rep(i,l,r) for(int i=(l);i<(r);i++)
#define per(i,r,l) for(int i=(r);i>=(l);i--)
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
#define eps 1e-9
#define PIE acos(-1)
#define cl(a,b) memset(a,b,sizeof(a))
#define fastio ios::sync_with_stdio(false);cin.tie(0);
#define lson l , mid , ls
#define rson mid + 1 , r , rs
#define ls (rt<<1)
#define rs (ls|1)
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define dd(x) cout << #x << " = " << (x) << ","
#define de(x) cout << #x << " = " << (x) << "\n"
#define endl "\n"
using namespace std;
//}}} int n;
const int maxn=5e5+;
int dp[maxn][];
const int mod=1e9+;
inline int add(int a,int b){a+=b;if(a>mod)a-=mod;return a;} int main()
{
int n,a,b;
cin>>n>>a>>b;
cl(dp,);
dp[][]=dp[][]=;
FOR(i,,n){
FOR(j,,a)dp[i+j][]=add(dp[i+j][],dp[i][]);
FOR(j,,b)dp[i+j][]=add(dp[i+j][],dp[i][]);
}
cout<<add(dp[n][],dp[n][])<<endl;
return ;
}

递推,求至少连续放置三个U的危险组合的更多相关文章

  1. NYOJ-301递推求值

    递推求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f ...

  2. 算法笔记_091:蓝桥杯练习 递推求值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n- ...

  3. 查找至少连续出现三次的所有数字/连续3天的日期【LeetCode】

    编写一个SQL查询,查找至少连续出现三次的所有数字.+----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | ...

  4. NYOJ——301递推求值(矩阵快速幂)

    递推求值 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n)的 ...

  5. poj 3744 Scout YYF I(递推求期望)

    poj 3744 Scout YYF I(递推求期望) 题链 题意:给出n个坑,一个人可能以p的概率一步一步地走,或者以1-p的概率跳过前面一步,问这个人安全通过的概率 解法: 递推式: 对于每个坑, ...

  6. Java实现 蓝桥杯 算法提高 递推求值

    算法提高 递推求值 时间限制:1.0s 内存限制:256.0MB 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) ...

  7. Coin Toss(uva 10328,动态规划递推,限制条件,至少转至多,高精度)

    有n张牌,求出至少有k张牌连续是正面的排列的种数.(1=<k<=n<=100) Toss is an important part of any event. When everyt ...

  8. poj 2096 Collecting Bugs 【概率DP】【逆向递推求期望】

    Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 3523   Accepted: 1740 ...

  9. attack on titans(动态规划递推,限制条件,至少转至多方法,进击的巨人)

    题目意思: 给n个士兵排队,每个士兵三种G.R.P可选,求至少有m个连续G士兵,最多有k个连续R士兵的排列的种数. 原题 Attack on Titans Time Limit: 2 Seconds ...

随机推荐

  1. 基于AccessToken方式实现API设计

    一.举例说明: 需求: A.B机构需要调用X服务器的接口,那么X服务器就需要提供开放的外网访问接口. 分析: 1.开放平台提供者X,为每一个合作机构提供对应的appid.app_secret. 2.a ...

  2. VUE实现简单的全选/全不选

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. 使用百度echarts仿雪球分时图(三)

    这章节将完成我们的分时图,并使用真实的数据来进行展示分时图. 一天的交易时间段分为上午的09:30~11:30,下午的13:00~15:00两个时间段,因为分时间段的关系,数据是不连续的,所以会先分为 ...

  4. iOS AVPlayer 的使用实践

    前两天在网上看到一篇博客,介绍AVPlayer的使用,但是只简单介绍了一下单个的本地文件如何播放,心血来潮,就想着做一个类似于播放器的东西,能够实现播放网络歌曲,循环播放多首音乐,下面我们来实现一下 ...

  5. Django—处理流程

    用户通过浏览器发送请求 请求到达request中间件,中间件对request请求做预处理或者直接返回response 若未返回response,会到达urlconf路由,找到对应视图函数 视图函数做相 ...

  6. Oralce问题之Oracle ORA-28001:某用户密码过期

    解决办法: (1).通过CMD打开命令行窗口,以sysdba连接数据库 SqlPlus / as sysdba (2).通过查询dba_user检查哪些用户过期 Sql>Select UserN ...

  7. org.apache.tomcat.util.descriptor.web.WebXml.setVersion Unknown version string [4.0]

    错误: 在 IDEA 创建WEB项目之后,打印出的日志中总是出现一行警告信息: 12-May-2018 15:52:30.692 警告 [RMI TCP Connection(3)-127.0.0.1 ...

  8. TcxComboBoxProperties下拉框填充

    原文地址:https://www1.devexpress.com/Support/Center/Question/Details/CQ30369 Actually, the corresponding ...

  9. 误删rpm命令的恢复方法

    rpm命令不能用了,被依赖的yum也不能使用了, 恢复rpm命令无外乎重装, 重装方法1: 使用源码编译,  需要gcc ,cmake包,如果没装,悲剧了 重装方法2: 找一台,和出问题的这台同样系统 ...

  10. hdu4786 Fibonacci Tree[最小生成树]【结论题】

    一道结论题:如果最小生成树和最大生成树之间存在fib数,成立.不存在或者不连通则不成立.由于是01图,所以这个区间内的任何生成树都存在. 证明:数学归纳?如果一棵树没有办法再用非树边0边替代1边了,那 ...