题解:每个物品放与不放两种情况,注意物品可能没有空余地方放进去了
#include <stdio.h> #include <iostream> using namespace std; int v,n; int a[35]; int wigh[20005]; int set(int k,int number){ if(number-a[k]<0)//这个物品放不进去 if(k+1==n)return number; else return min(number,set(k+1, number)); else {//这个物品可以放得进去 if(k+1==n)return number-a[k]; int t=min(set(k+1, number-a[k]),set(k+1, number));//放与不放中最小的 return t; } } int main(){ cin>>v>>n; for(int i=0;i<n;i++){ cin>>a[i]; } cout<<set(0, v)<<endl; return 0; }