从1-n个数取若干个数,使和为m,问多少种情况
Posted 下饭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从1-n个数取若干个数,使和为m,问多少种情况相关的知识,希望对你有一定的参考价值。
其实运用了背包问题的思想,假设对这个问题建立了函数:f(m,n)
从n个数中取:有两种情况
n不在这若干个数中,f(m,n-1)
n在这若干个数中,f(m-n,n-1)
所以 f(m,n)=f(m,n-1)+f(m-n,n-1)
根据上式,应用递归的思想,编程如下:
public class Test1 {
public static void main(String[] args) throws Exception {
Test1 test=new Test1();
System.out.println(test.fun(6,5));
}
public int fun(int m,int n){
if(n<1||m<1) {
return 0;
} if(m<n) {//如果最大值为m
n=m;
return fun(m,m-1)+1;
}if(m==n|m==1) {
return 1;
}
return fun(m,n-1)+fun(m-n,n-1);
}
}
以上是关于从1-n个数取若干个数,使和为m,问多少种情况的主要内容,如果未能解决你的问题,请参考以下文章
LightOJ - 1117 Helping Cicada (求1~n有多少个数不能被这m个数中任意一个整除)(容斥+状态压缩)