c语言代码:
实际上为背包问题变形,采用递归算法:
#include <stdlib.h>
#define N 1000
int data[N];
int isDePackaged(int sum,int next){
if(sum==0){
return 1;
}
if((sum>0||sum<0) && next ==0){
return 0;
}
//表示进入用data[next]的递归
if(isDePackaged(sum-data[next],next-1))return 1;
//表示进入不用data[next]的递归
return isDePackaged(sum,next-1);
}
int main(){
data[1]=1;
data[2]=3;
data[3]=5;
data[4]=7;
data[5]=9;
int result = isDePackaged(26,5);
printf("%s",result==1?"TRUE":"FALSE");
getchar();
}