【OpenJ 666】T1 放苹果(dp or dfs)
来源:互联网 发布:妮维雅舒安系列 知乎 编辑:程序博客网 时间:2024/05/29 07:59
描述
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
输出
对输入的每组数据M和N,用一行输出相应的K。
样例输入
1
7 3
样例输出
8
思路:
从整体上来看和数的划分很相似,其实感觉比数的划分还麻烦了一点因为它可以在盘子里什么也不放,不过结果都是差不多的,改了一点接着A了数的划分w
刚开始从c=0开始找,然后每次a/b划分,继而不断地找最终确定方案
具体实现是把a划分为b部分,若其中有1,则相当于把a-1苹果分到为b-1部分
若其中无1,把b部分都-1,相当于把a-b划分为j部分
其实这个可以dp来着,但是信仰dfs暴力出奇迹吧【圣光】
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<cmath>using namespace std;typedef long long LL;#define RI register intconst int sz = 100010;inline void read(int &x){ x=0;bool fl=0; char c=getchar(); while(c<'0'||c>'9') {if(c=='-') fl=1;c=getchar();} while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} if(fl) x*=-1;}inline void write(int x){ if(x<0) putchar('-'),x*=-1; if(x/10) write(x/10); putchar(x%10+'0');}int dfs(int a,int b,int c){ int ans=0; if(b==1) return 1; for(RI i=c;i<=a/b;++i) ans+=dfs(a-i,b-1,i); return ans;}int t,m,n;int main(){read(t);while(t--){ read(m),read(n); cout<<dfs(m,n,0)<<'\n';} return 0;}
阅读全文
0 0
- 【OpenJ 666】T1 放苹果(dp or dfs)
- 666:放苹果 dfs
- POJ-放苹果(DP)
- 2072: 放苹果(dp)
- POJ 1664 放苹果(dfs)
- hdu1664 放苹果(经典简单dfs)
- POJ1664:放苹果(DFS)
- 放苹果(组合+DFS)
- 【DP】放苹果问题
- POJ 1664 放苹果(DFS)
- Poj 1664 放苹果(dfs
- 九度OJ 1160:放苹果 (DFS)
- 放苹果 - POJ 1664 dp
- POJ-1664-放苹果-dp
- POJ 1664 放苹果 DP
- POJ 1664 放苹果(递归或DP)
- 九度1160:放苹果(简单dp)
- [dp]poj1664 放苹果 dp解法
- 傅里叶变换学习参考资料
- HEVC学习(九) —— 帧内预测系列之六
- Lesson 3 上机练习题——继承
- Lead time 在ERP 中怎么填
- 龙格库塔法求微分方程
- 【OpenJ 666】T1 放苹果(dp or dfs)
- V4L 简介及其与V4L2区别
- BZOJ 2821 作诗 分块
- ue4 资产管理问题 材质丢失之类
- 视图
- python模拟键盘输入
- Echarts简单使用实例
- 服务计算——selpg命令行程序
- ANR问题分析