POJ1664 计数 DP
题目传送门 http://poj.org/problem?id=1664
设$dp[i][j]$表示$i$个苹果放在$j$个盘子里的总数
$1.$ 当 苹果数 小于 盘子数 $(M < N)$的时候,剩下的$N-M$个盘子都为空,问题等价于在$M$个盘子里放苹果:$$dp[M][N]=dp[M][M]$$
$2.$ 当苹果数 大于等于盘子数$(M \geq N)$的时候,其可以分解为全部盘子都至少放一个苹果$(dp[M-N][N])$和至少有一个盘子为空$(dp[M][N-1])$的两个子结果的合并: $$dp[M][N]=dp[M-N][N] + dp[M][N-1]$$
$3.$递归出口:
$dp[M][1] = 1 ;\\ dp[0][N] = 1$
注意这里,为什么不采用$M=1$呢?只剩一个果子,也是只有一种放法啊。但是,例如,若$dp[3][3] = dp[3][2] + dp[0][3]$,此时$M$为$0$,未收敛于出口$M=1$处,找不到数据。
/*********************************
Author: jusonalien
Email : jusonalien@qq.com
school: South China Normal University
Origin: POJ
*********************************/
#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
#include <string>
#include <set>
#include <queue> using namespace std;
int dp(int m,int n) { //递归版本
if(m==0||n==1) return 1;
if(m < n) return dp(m,m);
else return (dp(m-n,n) + dp(m,n-1));
}
int DP[15][15];
void solve() { //递推版本
for(int i = 0;i <= 12;++i) DP[0][i] = 1;
for(int i = 0;i <= 12;++i) DP[i][1] = 1;
for(int i = 1;i <= 10;++i) {
for(int j = 1;j <= 10;++j) {
if(i < j) DP[i][j] = DP[i][i];
else DP[i][j] = DP[i-j][j] + DP[i][j-1];
}
}
}
int main(){
int m,n,t;
solve();
scanf("%d",&t);
while(t--) {
scanf("%d%d",&m,&n);
printf("%d\n",DP[m][n]);
// printf("%d\n",dp(m,n));
}
return 0;
}
POJ1664 计数 DP的更多相关文章
- HDU5800 To My Girlfriend 背包计数dp
分析:首先定义状态dp[i][j][s1][s2]代表前i个物品中,选若干个物品,总价值为j 其中s1个物品时必选,s2物品必不选的方案数 那么转移的时候可以考虑,第i个物品是可选可可不选的 dp[i ...
- CodeForces 176B Word Cut (计数DP)
Word Cut Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit St ...
- [DP之计数DP]
其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...
- HDU4815/计数DP
题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=4815] 简单说一下题意: 有n道题,每到题答对得分为a[ i ],假如A不输给B的最小概率是P,那么A ...
- HDU 6377 度度熊看球赛 (计数DP)
度度熊看球赛 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 计数dp
计数dp 计数类的$dp$没做过几个,所以之前都放到"思维"标签下了,后来发现原来这属于一类问题啊...搬过来了. 管道取珠:https://www.lydsy.com/Judge ...
- [SDOI2010]地精部落[计数dp]
题意 求有多少长度为 \(n\) 的排列满足 \(a_1< a_2> a_3 < a_4 \cdots\) 或者 $a_1> a_2 < a_3 > a_4\cdo ...
- 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas
[题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...
- 【AtCoder】AGC022 F - Leftmost Ball 计数DP
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...
随机推荐
- <Redis> 入门一 概念安装
Redis 概念 redis是一款高性能的NOSQL系列的非关系型数据库 什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅 ...
- [Python3网络爬虫开发实战] 1.8.2-Scrapy的安装
Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted 14.0.lxml 3.4和pyOpenSSL 0.14.在不同的平台环境下,它所依赖的库也各不相同,所以在安装 ...
- linux纯字符界面不支持中文
[2017-01-17] linux纯字符界面不支持中文
- http2提升效率的几个点
1.二进制传输,消息的解析效率更高 2.头部数据压缩,传输效率更高 3.多路复用,可以让请求并发执行 4.服务器推送,可以主动推送数据到浏览器 http2加载图片demo:https://http2. ...
- 树莓派 - 通过sysfs操控GPIO
点亮或熄灭LED 硬件上,一个LED灯接在pi的Pin-25. 该引脚为BCM的GPIO26 $ gpio readall +-----+-----+---------+------+---+--- ...
- 安装nvm 切换nodejs版本
删除已安装的nodejs--------------------------------------------------------------- #查看已经安装在全局的模块,以便删除这些全局模块 ...
- 多.h项目出现的问题:使用了预编译头依然出现error LNK2005:***obj已在***obj中定义与c++ error C2011: “xxx”:“class”类型重定义解决办法
使用了预编译头依然出现error LNK2005:***obj已在***obj中定义 造成该问题的可能性比较多,本人将在今后遇到时添加进来,今天先放出本人遇到的一种情况. 多重包含含有变量定义的.h文 ...
- 关于Filter中ServletRequest和ServletResponse强转HttpServletRequest和HttpServletResponse安全问题(向下转型一定不安全吗?)
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOE ...
- Jmeter&Ant构建自动化测试平台
JMeter是一个软件,使负载测试或业绩为导向的业务(功能)测试不同的协议或技术. Apache软件基金会的Stefano Mazzocchi JMeter的最初的开发.他写道:它主要对 Apache ...
- [bzoj3489]A simple rmq problem_KD-Tree
A simple rmq problem 题目大意:给定一个长度为$n$的序列,给出$m$个询问:在$[l,r]$之间找到一个在这个区间里只出现过一次的最大的数. 注释:$1\le n\le 10^5 ...