动态规划方法
选取邮票时对于每一张邮票具有选取与不选取两种可能性,构成总数为2^n的树状可选序列。
当邮票总值大于目标值时剪枝,动态判断最小张数得出结果。
#include<iostream>
using namespace std;
void travel(int values[],int len,int target,
int i,int sum,int size,int &minSize){
if(i<len&&sum<target){ //剪枝
if(sum+values[i]==target&&size+1<minSi***Size=size+1; //动态判断是否为最小张数
}
travel(values,len,target,i+1,sum+values[i],size+1,minSize);
travel(values, len, target, i+1, sum,si***Size);
}
}
int main(){
int target,len;
cin>>target;cin>>len;
int values[len];
for(int i=0;i<len;i++){
cin>>values[i];
}
int minSize=INT32_MAX;
travel(values,len,target,0,0,0,minSize);
if(minSize==INT32_MAX){
minSize=0;
}
cout<<minSize;
}

京公网安备 11010502036488号