信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)
#include <bits/stdc++.h>
using namespace std;
int m, n, sumVal, maxVal, sumWei;
int w[35], v[35];
void dfs(int i)
{
if(i > n)
{
maxVal = max(maxVal, sumVal);
return;
}
dfs(i + 1);
if(sumWei + w[i] <= m)
{
sumWei += w[i];
sumVal += v[i];
dfs(i + 1);
sumWei -= w[i];
sumVal -= v[i];
}
}
int main()
{
cin >> m >> n;
for(int i = 1; i <= n; ++i)
cin >> w[i] >> v[i];
dfs(1);
cout << maxVal;
return 0;
}