【HDU4301】Divide Chocolate
题意
有一块n*2的巧克力,将它分成k块,问有多少种方法。
分析
emmm是dp没错了。
最容易想到的状态定义是f[i][j],意思是前i行,分成j块的方案数。但是发现没法转移。(后面会说一下为什么···)
我们把状态定义为f[i][j][0]和f[i][j][1]。
f[i][j][0]:前i行分成j块,且第i行的两小块巧克力是没有连在一起的。
f[i][j][1]:前i行分成j块,且第i行的两小块巧克力是连在一起的。
我们来把转移分一下类。
情况1:从i行到i+1行的时候,巧克力的块数多了两块。这说明,第i+1行的两小块一定是分开的,而且没有和第i行的相连。那么转移只有一种情况f[i][j][0]=f[i-1][j-2][0]+f[i-1][j-2][1]
情况2:从i行到i+1行的时候,巧克力的块数多了一块。如果第i+1行的两小块是连在一起的一整块,那么一定没有和i行的相连。既f[i][j][1]=f[i-1][j-1][0]+f[i-1][j-1][1]。如果第i+1行的两小块是分开的,那么一定有一块是和i行相连。既f[i][j][0]=f[i-1][j-1][1]*2+f[i-1][j-1][0]*2
情况3:从i行到i+1行的时候,巧克力的块数没有增加。这就说明第i+1行的一定是和i行相连的。如果第i+1行两小块是分开的,那么第i行一定是分开的。所以f[i][j][0]=f[i-1][j][0]。如果i+1行两小块是和在一起的,那么就要分类讨论。
思路大概就是这个样子。。。
至于为什么简单的定义为f[i][j]没法转移,因为,我试过了···他就是没法转移···········
咳咳不闹,我们来看第三种情况,他的转移是和前一行是分开还是连在一起的有关。所以我们要表示出这个状态。
下面是代码,我尽量写的可读性强一些了···
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std;
const int maxn=+;
const int MOD=;
int n,k,T;
int f[maxn][*maxn][];//0分开,1和起来
int main(){
scanf("%d",&T);
for(int t=;t<=T;t++){
memset(f,,sizeof(f));
scanf("%d%d",&n,&k);
f[][][]=f[][][]=;
for(int i=;i<=n;i++){
f[i][*i][]=;f[i][][]=;
for(int j=;j<*i;j++){
//******第1,2种情况***********
f[i][j][]=(f[i-][j-][]+f[i-][j-][])%MOD;//1.1
f[i][j][]=(f[i-][j-][]*+f[i-][j-][]*)%MOD;//2.1
f[i][j][]=(f[i][j][]+f[i-][j-][]+f[i-][j-][])%MOD;//2.2 //*********第3种情况**************
f[i][j][]=(f[i][j][]+f[i-][j][]*+f[i-][j][])%MOD;
f[i][j][]=(f[i][j][]+f[i-][j][])%MOD;
}
}
int ans=(f[n][k][]+f[n][k][])%MOD;
printf("%d\n",ans);
}
return ;
}
【HDU4301】Divide Chocolate的更多相关文章
- 【Leetcode】 - Divide Two Integers 位运算实现整数除法
实现两个整数的除法,不许用乘法.除法和求模.题目被贴上了BinarySearch,但我没理解为什么会和BinarySearch有关系.我想的方法也和BS一点关系都没有. 很早以前我就猜想,整数的乘法是 ...
- 【leetcode】Divide Two Integers (middle)☆
Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...
- 【cf490】D. Chocolate(素数定理)
http://codeforces.com/contest/490/problem/D 好神的一题,不会做.. 其实就是将所有的质因子找出来,满足: 最终的所有质因子的乘积相等 但是我们只能操作质因子 ...
- 【Leetcode】【Medium】Divide Two Integers
Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...
- 【Leetcode】Divide Two Integers
Divide two integers without using multiplication, division and mod operator. class Solution { public ...
- 【HDU4751】Divide Groups
题目大意:给定 N 个点和一些有向边,求是否能够将这个有向图的点分成两个集合,使得同一个集合内的任意两个点都有双向边联通. 题解:反向思考,对于没有双向边的两个点一定不能在同一个集合中.因此,构建一个 ...
- 【基数排序】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) C. Jon Snow and his Favourite Number
发现值域很小,而且怎么异或都不会超过1023……然后可以使用类似基数排序的思想,每次扫一遍就行了. 复杂度O(k*1024). #include<cstdio> #include<c ...
- 【bzoj2430】[Poi2003]Chocolate 贪心
题目描述 有一块n*m的矩形巧克力,准备将它切成n*m块.巧克力上共有n-1条横线和m-1条竖线,你每次可以沿着其中的一条横线或竖线将巧克力切开,无论切割的长短,沿着每条横线切一次的代价依次为y1,y ...
- 【HDOJ6616】Divide the Stones(构造)
题意:给定n堆石子,第i堆的个数为i,要求构造出一种方案将其分成k堆,使得这k堆每堆数量之和相等且堆数相等 保证k是n的一个约数 n<=1e5 思路:先把非法的情况判掉 n/k为偶数的方法及其简 ...
随机推荐
- 首次尝试LINUX下的ssh命令:登录和退出
1:我现在本机安装了centos虚拟机,然后在windows桌面下使用SecureCRT ssh客户端登录我的本地虚拟机,再然后 通过centos下的ssh命令登录局域网内测试机192.168.0.1 ...
- larave 控制器中获取路由参数
Laravel中获取路由参数Route Parameters的五种方法示例 作者:SeekerLiu 这篇文章主要给大家介绍了关于Laravel中获取路由参数Route Parameters的五种方法 ...
- 转载的,讲解java.util的集合类
本文是转载的 http://www.ibm.com/developerworks/cn/java/j-lo-set-operation/index.html#ibm-pcon 在实际的项目开发中会有很 ...
- 【前端】CSS入门笔记
教程 CSS 指层叠样式表 (Cascading Style Sheets) CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 选择器通常是您需要改变样式的 HTML 元素 ...
- debezium 数据变更工具使用
1. 作用 简单概述就是CDC(change data capture),实时数据分析领域用的比较多 2. 简单使用(基于官网的docker 说明) 备注: 测试没有使用守护进程模式为了方便测 ...
- 向HDFS中追加内容
向生成好的hdfs文件中追加内容,但是线上使用的版本是1.0.3,查看官方文档发现,在1.0.4版本以后才支持文件append 以下是向hdfs中追加信息的操作方法 如果你只在某一个driver中追加 ...
- Excel 2007 打开 UTF-8 编码 CSV 文件的乱码BUG
http://blog.sina.com.cn/s/blog_6c3b65fd01018dgq.html 打开UTF-8编码的CSV方法: 1) 打开Excel 2007 2) 执行“数据”-> ...
- ubutun
地址:http://www.cnblogs.com/dutlei/archive/2012/11/20/2778327.html
- xe 最大连接数限制、记录客户连接、心跳
xe 最大连接数限制.记录客户连接.心跳 //author: cxg unit DSServerContainer; interface uses SysUtils, Classes, IniF ...
- win10 Edge 无法上网代理服务器错误
当连接好网络时 Edge无法上网,提示代理服务器错误,系统其他非第三方软件同样网络异常 解决:为当前所连接的网络更新自动检测 控制面板->网络和Internet->Internet选项-& ...