[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 ...
随机推荐
- spring整合mybatis报.UnsatisfiedDependencyException错误
tomcat启动报org.springframework.beans.factory.UnsatisfiedDependencyException:错误 org.springframework.bea ...
- Android apk逆向:反编译,回编译,签名,打包。
Android apk逆向:反编译,回编译,签名,打包流程. 第一步: apk 反编译. 1) 打开命令行窗口,输入java -version, 检测当前java版本,若版本较低, 则下载JAVA S ...
- Unity 代码提示符和UGUI屏幕自适应
[Header]("提示字符") Canvas Scaler 屏幕自适应
- 或与异或 [背包DP]
也许更好的阅读体验 \(\mathcal{Description}\) 给定\(n\)和长度为\(n\)的数组\(a\) 问从\(a\)中选取任意个数使得其 异或起来的值 等于 或起来的值 的方案数 ...
- [NOI2019]弹跳(KD-Tree/四分树/线段树套平衡树 优化建图+Dijkstra)
本题可以用的方法很多,除去以下三种我所知道的就还有至少三种. 方法一:类似线段树优化建图,将一个平面等分成四份(若只有一行或一列则等分成两份),然后跑Dijkstra即可.建树是$O(n\log n) ...
- C# 截取字符串方法总结
第一种:根据单个分隔字符用split截取 string st="GT123_1"; string[] sArray=st.split("_"); //即可得到s ...
- String.Join函数
string[] str1 = { "abc", "bcd", "cde", "efg" }; string str2 ...
- MVC的Views中使用递归生成Html【转】
在开发过程中往往会有一个需求,就是将一个树状的数据结构在视图中表示出来.例如最传统的多级分类,系统中有一系列根分类,每个分类中又带有一些子分类,而我们的目标便是在页面上生成一个由ul和li嵌套组成的H ...
- AWS--Lamdba
分享一个Lambda相关的连接 https://blog.csdn.net/m0_37204491/article/details/72829477
- 你需要知道的 5 个 Linux 新手会犯的失误
Linux 爱好者们分享了他们犯下的一些最大错误. 终身学习是明智的 —— 它可以让你的思维敏捷,让你在就业市场上更具竞争力.但是有些技能比其他技能更难学,尤其是那些小菜鸟错误,当你尝试修复它们时可能 ...