解和的组合
来源:互联网 发布:电信网络诈骗图片 编辑:程序博客网 时间:2024/05/05 16:49
#ifndef HEADER_AND
#define HEADER_AND
#include <iostream.h>
const int A_Max=70;
class And
{//求和为值的组合
private:
int x;
int unit[A_Max];
int dsp[A_Max+1]; //为方便起见,使数值与下标直接对应,浪费一个0好喽
long and(int x, int base, int length);
long Aand_kinds(int x, int base);
long dynamic_state_programming(int x, int base);
public:
And(const int xx=1);
void Aget(int xx);
long Aand();
long Aand_kinds();
long dynamic_state_programming();
};
#endif
/////////////////////////////////////////////
#include "And.h"
And::And(const int xx): x(xx)
{
while (x<0 || x>A_Max)
{
cout<<"请输入大于0,小于"<<A_Max+1<<"的数(因为60的时侯就96万种组合了): ";
cin>>x;
}
for (int i=0; i<=A_Max; i++)
dsp[i]=0;
}
void And::Aget(int xx)
{
while (xx<=0 || xx>A_Max)
{
cout<<"请输入大于0,小于"<<A_Max+1<<"的数(因为60的时侯就96万种组合了): ";
cin>>xx;
}
x=xx;
}
long And::Aand()
{
return and(x,1,0);
}
long And::and(int x, int base, int length)
{
long count=0;
if (!x)
{
for (int i=0; i<length; i++)
cout<<unit[i]<<' ';
cout<<endl;
return 1;
}
if ( x < base ) return 0;
for (int j=0; j<=x/base; j++)
{
for(int k=0; k<j; k++)
unit[length+k]=base;
//内层循环的这一语句很重要。
//因为输出语句都是共用一个数组的,这一句
//的作用就在于清空和刷新数组。
count+=and(x-j*base, base+1, length+j);
}
return count;
}
long And::Aand_kinds()
{
return Aand_kinds(x,1);
}
long And::Aand_kinds(int x, int base)
{
long count=0;
if ( !x ) return 1;
if (x < base) return 0;
for (int i=0; i<=x/base; i++)
count+=Aand_kinds(x-i*base, base+1);
return count;
}
long And::dynamic_state_programming()
{
return dynamic_state_programming(x,1);
}
long And::dynamic_state_programming(int x, int base)
{
long count=0;
if (dsp[x]) return dsp[x];
if ( !x ) return 1;
if (x < base) return 0;
for (int i=0; i<=x/base; i++)
count+=Aand_kinds(x-i*base, base+1);
return dsp[x]=count;
}
- 解和的组合
- 39.和的组合
- 组合数的和
- 编译和解释的组合
- 聚合和组合的区别
- 聚合和组合的区别
- 聚合和组合的区别
- 继承和组合的比较
- 继承和组合的比较
- 聚合和组合的区别
- 字符串的排列和组合
- 组合和继承的选择
- 聚合和组合的区别
- 聚合和组合的区别
- 继承和组合的区别
- 组合和聚合的区别
- 组合和继承的关系
- 接口的组合和继承
- tomcat6中的连接池配置
- 2010年4月3日
- 让你不在害怕指针
- 熊猫妈妈被吓了一跳
- AuthPermission
- 解和的组合
- 阿sa vs 马化腾
- 转载: Response.Redirect和Server.Transfer的区别在哪儿?
- Spring切入点表达式常用写法
- VB
- 正则表达式
- 什么是社交礼仪
- empty()
- 解猜数字问题