有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式。如:
n=5,5个数分别为1,2,3,4,5,t=5;
那么可能的组合有5=1+4和5=2+3和5=5三种组合方式。
递归式水题,无非n个数那么从第一个数开始有两种选择,用与不用,递归一下,如果正好被减为零时,返回1。
#include<iostream>
#include<string.h>
using namespace std;
int a[1005],t,n;
int f(int x,int y)
{
int g;
if(x==0&&y<=(n+1)){return 1;}
if(x<0||y>(n+1)){return 0;}
g=f(x-a[y],y+1)+f(x,y+1);
return g;
}
int main()
{
int k;
memset(a,0,sizeof(a));
cin>>n>>t;
for(int i=1;i<=n;i++)
{cin>>a[i];}
k=f(t,1);
cout<<k;
}