代码如下,用的是记忆化搜索版的dp,看了下最后一个点是20000, 30,我的数据范围应该没错吧
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n, m;
int memo[N][N];
int v[N], w[N];
int dfs(int i, int j){
if(i < 0) return 0;
int& res = memo[i][j];
if(res != -1) return res;
if(j < v[i]) return res = dfs(i - 1, j);
return res = max(dfs(i - 1, j), dfs(i - 1, j - v[i]) + w[i]);
}
int main(){
cin >> m >> n;
for(int i = 0; i < n; i++) cin >> v[i], w[i] = v[i];
memset(memo, -1, sizeof memo);
int res = m - dfs(n - 1, m);
cout << res << endl;
return 0;
}