华为OJ放苹果&&整数划分
来源:互联网 发布:非线性最优化确定参数 编辑:程序博客网 时间:2024/05/01 13:52
题目描述
题目描述
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入
每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。
样例输入
7 3
样例输出
8
/**
* 计算放苹果方法数目
* 输入值非法时返回-1
* 1 <= m,n <= 10
* @param m 苹果数目
* @param n 盘子数目数
* @return 放置方法总数
*
*/
public static int count(int m, int n)
输入描述:
输入两个int整数
输出描述:
输出结果,int型
输入例子:
7 3
#include<iostream>using namespace std;int f(int m,int n) { if(m==1||n==1)return 1; if(m<n) return f(m,m); else if(m>n) return f(m,n-1)+f(m-n,n);
else return 1+f(m,n-1);}int main() { int fruit,dis; while(cin>>fruit>>dis) { cout<<f(fruit,dis)<<endl; } return 0;}
整数划分?
- n=m1+m2+...+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,...,mi}为n的一个划分。
- 如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi)<=m,则称它属于n的一个m划分。这里我们记n的m划分的个数为f(n,m);
- 举个例子,当n=5时我们可以获得以下这几种划分(注意,例子中<=5)
与放苹果类似f(n,m)n为要划分的数 m为划分时包含的最大的数5 = 5
= 4 + 1
= 3 + 2
= 3 + 1 + 1
= 2 + 2 + 1
= 2 + 1 + 1 + 1
= 1 + 1 + 1 + 1 + 1
#include<iostream>using namespace std;int f(int n,int m) { if(n==1||m==1)return 1; if(n<m) return f(n,n); else if(m==n)return f(m,m-1)+1; else return f(n,m-1)+f(n-m,m); }int main() { int n,m; while(cin>>n>>m) { cout<<f(n,m)<<endl; } return 0;}下面是刚刚参考的别人博客的内容,感觉很好
几个变种:
(一)要求1,2,3,4..,m中每个数只允许使用一次的时?
此时我们需要调整我们的状态转换公式。
f(n-m,m)+f(n,m-1); (n>m) 应该更改为:f(n-m,m-1)+f(n,m-1); (n>m)
为什呢?因为每个数最多使用一次,f(n-m,m-1)表示我们取了数m,f(n,m-1)表示我们没取,但是无论取不取数m我们以后都不会再次取数m了。
当然喽,我们还需要调整边界状态:当m=1时,f(n,m)=1;当n=1而m>1时,f(n,m)=0。
其他不变!
(二)要求只能取1,2,3,4,..,m中的奇数?(默认m为奇数,如果不是则m=m-1)
这个呢,我们首先需要调整边界状态:当m=1时,f(n,m)=1;当n=1而m>1时,f(n,m)=0
其次,我们需要调整状态转换公式:
f(n-m,m)+f(n,m-1); (n>m) 应该更改为:f(n-m,m)+f(n,m-2); (n>m)
这是因为我们不能取偶数,故而当m为奇数的时候,m-1为偶数(只能被选择0次),f(n,m-1)=f(n,m-2);
- 华为OJ放苹果&&整数划分
- 【华为oj】放苹果
- 华为oj 放苹果
- 华为oj 放苹果
- 【华为 OJ】 放苹果
- 【华为OJ】放苹果
- 华为OJ:放苹果
- 华为OJ放苹果
- 华为OJ:2041 放苹果
- 华为OJ(放苹果)
- 【华为OJ】【080-放苹果】
- 华为OJ 初级:放苹果
- 华为oj初级 放苹果
- pku 1664 放苹果 (整数划分)
- 整数划分问题(放苹果)
- 整数划分问题与放苹果
- POJ1664:放苹果(整数划分)
- 华为OJ——放苹果
- js int string转化方式
- 清除MySQL注册信息-重装mysql
- centos7 挂载ntfs盘 usb移动硬盘
- 枚举Enum用法详解
- 蜂鸣器
- 华为OJ放苹果&&整数划分
- 103.Binary Tree Zigzag Level Order Traversal
- C语言:单链表的创建,打印及销毁
- Android 看到什么写什么——关于有时候Android studio编写的时候大R丢失并且import出不来的问题
- Day31、未决信号、有名管道、IPC进程间通讯(消息队列)
- shFlags Introduction
- ibm_system 3650安装
- 数据库创建(CREATE),数据库的修改(Update),数据库的删除(ALERT)
- poj2553 The Bottom of a Graph--Kosaraju算法 & 缩点 & 强连通分量