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