[Luogu 2386]放苹果
Description
把 \(n\) 个同样的苹果放在 \(m\) 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发。多测,数据组数 \(t\)。
\(1\leq m,n\leq 10, 1\leq t\leq 20\)
Solution
康复训练 \(\times 3\)。
下午给学弟讲课时发现了这样一道题...数据完全可以出到 \(O(n^2)\) 。当然原题的意思是要用搜索做...
我们记 \(f_{i,j}\) 为 \(i\) 个苹果放在 \(j\) 个盘子中的方案数。显然边界条件为 \(\forall i,f_{0,i}=1\),理由是没有苹果时局面只有一种,即任何盘子都为空。
要注意到这样一个性质,由于盘子均相同,所以 \(f_{i,j}=f_{i,i},j>i\)。
对于 \(\text{DP}\) 方程,考虑第 \(j\) 个盘子怎么放。
- 若第 \(j\) 个盘子不放苹果,那么只需考虑 \(i\) 个苹果放在 \(j-1\) 个盘子中的方案数,即 \(f_{i,j-1}\);
- 若第 \(j\) 个盘子放苹果,由常规套路 \(\text{DP}\) 时由无序变有序,盘子放苹果数单调递减。那么如果最后一个盘子都有苹果,则所有盘子都有苹果。我们将每个盘子中的苹果数均 \(-1\),就变成了一般情况。此时方案数为 \(f_{i-j,j}\)。
综上方程为 \(f_{i,j}=f_{i,j-1}+f_{i-j,j}\)。
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 50;
int f[N][N], n, m, t;
int main() {
for (int i = 0; i < 50; i++) f[0][i] = 1;
for (int i = 1; i < 50; i++)
for (int j = 1; j < 50; j++) {
if (j > i) f[i][j] = f[i][i];
else f[i][j] = f[i][j-1]+f[i-j][j];
}
scanf("%d", &t);
while (t--) {
scanf("%d%d", &m, &n);
printf("%d\n", f[m][n]);
}
return 0;
}
[Luogu 2386]放苹果的更多相关文章
- 【递归】P2386放苹果
题目相关 题目描述 把 m个同样的苹果放在 n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法.(5,1,1 和 1,1,5 是同一种方法) 输入格式 第一行是测试数据的数目 t,以下每行 ...
- OpenJudge 666:放苹果 // 瞎基本DP
666:放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1 ...
- oj放苹果
题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m< ...
- POJ 1664 放苹果
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24985 Accepted: 15908 Description ...
- POJ --- 1164 放苹果
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24947 Accepted: 15887 Description ...
- POJ——放苹果
4:放苹果 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示) ...
- poj1664放苹果(递归)
题目链接:http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- 放苹果(poj1664递归)
ti放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24392 Accepted: 15513 Descripti ...
- poj 1664 放苹果(递推)
题目链接:http://poj.org/problem? id=1664 放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
随机推荐
- Mybatis 批量插入带oracle序列例子+ORA-02287: 此处不允许序号
在使用mybatis进行批量插入时,发现对于使用Oracle的自动增长序列时提示 : ORA-02287: 此处不允许序号 的错误,下面的这种使用可以解决问题: <!-- 批量插入 --> ...
- redis学习(二)——案例练习
案例需求: 1.提供index.html页面,页面中有一个省份下拉列表 2.当页面加载完成后发送ajax请求,加载所有省份 3.列表中的省份保持不变,则之后每次刷新页面都是从redis中获取 * 注意 ...
- c#学习笔记2-委托
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...
- Haffman编码
Huffman树又称为最优树,是一种带权路径最短的树. 一.带权路径 在一棵树中我们把一个节点到另一个节点之间的通路叫做路径,在路径中每经过一个节点路径的长度就加一.如果对一个节点附上权值,则该节点的 ...
- [UOJ #393]【NOI2018】归程
题目大意:有一张$n$个点$m$条边的图,每个边有两个属性$a_i,b_i$.有$Q$个询问,每个询问给出$v,p$,表示所有边中$b_i\leqslant p$的边会被标记,在点$v$,可以通过不被 ...
- 全栈项目|小书架|服务器端-NodeJS+Koa2实现首页图书列表接口
通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 首页书籍信息 先来回顾一下首页书籍都有哪些信息: 从下面的图片可以看 ...
- nmon2influxdb+grafana:服务监控可视化部署
在工作中,无论是定位线上问题,还是性能优化,都需要对前端.后台服务进行监控.而及时的获取监控数据,能更好的帮助技术人员排查定位问题. 前面的博客介绍过服务端监控工具:Nmon使用方法及利用easyNm ...
- Golang_小程序学golang
1 前置条件 Golang基本情况自行baidu/google 1.1 环境与工具 IDE:liteide (windows ).mingw-w64 (gcc) DB:SQL Server 2008 ...
- springboot IDEA新建Maven项目的Plugins出现红线的解决方法
将pom.xml文件copy到桌面,删除项目中的pom.xml.发现项目maven中没有任何东西后,然后将桌面的pom.xml粘贴到项目目录下,刷新maven就ok了
- HDU2476 String painter(DP)
题目 String painter 给出两个字符串s1,s2.对于每次操作可以将 s1 串中的任意一个子段变成另一个字符.问最少需要多少步操作能将s1串变为s2串. 解析 太妙了这个题,mark一下. ...