题目链接

题意:给定m个H和n个D(1<=n,m<=20),问这些字母构成的序列中,对于任意位置,从左开始数H的累积个数总是不比D的累计数少的排列有多少种。

题解:二维DP,画一个正方形,从左上角到右下角画一条线,右上方区域就是我们所要求的。另外注意这个题的输入顺序是先输入m再输入n。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[][];
int n,m;
void init()
{
memset(dp,,sizeof(dp));
for(int j=; j<=; j++) dp[][j]=;
for(int i=; i<=; i++)
for(int j=i; j<=; j++)
dp[i][j]=dp[i-][j]+dp[i][j-];
}
int main()
{
init();
while(cin>>m>>n)
cout<<dp[n][m]<<endl;
return ;
}

虽然知道深搜2^40会超时,但还是用深搜写了一发。

#include <bits/stdc++.h>
using namespace std;
int n,m,x,ans,data[];
void dfs(int k,int n,int m)
{
if(k==x)
{
int tmp=;
for(int i=; i<k; i++)
{
tmp+=data[i];
if(!data[i]) tmp--;
if(tmp<) return;
}
if(tmp>=)
{
//for(int i=0; i<k; i++) printf("%d ",data[i]);
//printf("*\n");
ans++;
}
//memset(data,0,sizeof(data));
return;
}
if(n>)
{
data[k]=; n--;
dfs(k+,n,m);
n++;//这个一定要放到里面
} if(m>)
{
data[k]=; m--;
dfs(k+,n,m);
m++;
}
}
int main()
{
while(cin>>m>>n)
{
memset(data,,sizeof(data));
x=n+m;
ans=;
dfs(,n,m);
cout<<ans<<endl;
}
return ;
}

貌似这道题还可以用公式算:传送门

HDU1267 下沙的沙子有几粒? 基础DP的更多相关文章

  1. hdu 1267 下沙的沙子有几粒? (递推)

    下沙的沙子有几粒? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  2. HDU——1267 下沙的沙子有几粒?

    下沙的沙子有几粒? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  3. HDU 1267 下沙的沙子有几粒?

    题解:利用卡特兰数的几何意义,题目就可以转化为一个棋盘格,可以向下走或是向右走,但是不可以逾越对角线,就可以了. #include <cstdio> #include <iostre ...

  4. HDU ACM 1267 下沙的沙子有几粒?-&gt;DP

    题意:m个H和n个D,从左開始数H的累积个数总不比D的累计数少的排列有多少种.比如,3个H和1个D共同拥有3种符合要求的排列H D H H,H H D H,H H  H D. 分析:状态方程为,DP[ ...

  5. C - 下沙小面的(2)

    C – 下沙小面的(2)Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uSubmit StatusDes ...

  6. hdu1527下沙小面的(二)

    B - 下沙小面的(2) Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  7. hdu 1292 &quot;下沙野骆驼&quot;ACM夏令营 (递推)

    "下沙野骆驼"ACM夏令营 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  8. .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础

    基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

  9. Ubuntu14.04下沙盒数据导入到 Neo4j 数据库(图文详解)

    不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793914   (表示感谢) 前期博客 Neo4j沙盒实验申请过程 ...

随机推荐

  1. Linux-Shell脚本编程-学习-5-Shell编程-使用结构化命令-if-then-else-elif

    if-then语句 if-then语句格式如下 if comman then command fi bash shell中的if语句可鞥会和我们接触的其他if语句的工作方式不同,bash shell的 ...

  2. 【SpringCloud】第一篇: 服务的注册与发现(Eureka)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  3. spring boot 过滤器实现接收 压缩数据 并解压

    1.新加类GzipRequestWrapper 继承HttpServletRequestWrapper类 public class GzipRequestWrapper extends HttpSer ...

  4. 1087 All Roads Lead to Rome (30 分)(最短路径)

    直接用Dijkstra做 #include<bits/stdc++.h> using namespace std; int n,m; map<string,int>si; ma ...

  5. Ubuntu18.04 + CUDA9.0 + cuDNN7.3 + Tensorflow-gpu-1.12 + Jupyter Notebook深度学习环境配置

    目录 一.Ubuntu18.04 LTS系统的安装 1. 安装文件下载 2. 制作U盘安装镜像文件 3. 开始安装 二.设置软件源的国内镜像 1. 设置方法 2.关于ubuntu镜像的小知识 三.Nv ...

  6. 容器基础(五): 实现一个简单容器sdocker

    在前面几部分的基础上, 我们更新一下代码,实现一个简单容器 sdocker. sdocker目录构成 linux: # tree . ├── Makefile ├── cpu-test.c # 由cp ...

  7. BZOJ 2049 SDOI2008 洞穴勘测 LCT板子

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2049 题意概述:给出N个点,一开始不连通,M次操作,删边加边,保证图是一个森林,询问两点连 ...

  8. Git&GitHub&GitBook

    一.定义 Git(分布式版本控制系统) GitHub gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub. gitHub于2008年4 ...

  9. 玩转VFS(二)

    关于VFS的第一篇中已经太长了 http://www.cnblogs.com/honpey/p/6348914.html 另起一篇: 1)如何在kernel里找到目前文件系统中的根目录: 2) 如何能 ...

  10. Java IO 流 体系结构图