题解
比较简单的dp问题,01背包的简单变形, 理解就会做。
代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
int n,m,sum=0;
int w[100];
int dp[20001];
int main(void){
cin>>m>>n;
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=1;i<=m;i++) // key point
dp[i] = i;
for(int i=1;i<=n;i++){
for(int j=m;j>=w[i];j--){
dp[j] = min(dp[j],dp[j-w[i]] );
}
}
cout<<dp[m]<<endl;
return 0;
}