动态规划方法
选取邮票时对于每一张邮票具有选取与不选取两种可能性,构成总数为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; }