You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
1.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int n; //物品的数量
int m; //背包的体积上限
int w[N]; //每个物品的价值
int v[N]; //每个物品的体积
/**
* 功能深度优先搜索解决01背包
* @param step 走到第step物品面前
* @param r 剩余容量r
* @return 可以获得的最大价值是多少
*/
int dfs(int step, int r) {
//如果都出界了返回0
if (step == n + 1) return 0;
//结果
int res;
//如果不够装下,只能放弃
if (v[step] > r) res = dfs(step + 1, r);
//如果可以装下,可以选择要、还是不要
else res = max(dfs(step + 1, r), dfs(step + 1, r - v[step]) + w[step]);
return res;
}
int main() {
//优化输入
ios::sync_with_stdio(false);
//物品个数与背包容量
cin >> n >> m;
//读入每个物品的体积和价值
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i];
//深搜并输出结果~
cout << dfs(1, m) << endl;
return 0;
}