您的位置:首页 > 其它

【志银】NYOJ《题目860》又见01背包

2016-05-20 19:32 218 查看
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=860

#include<iostream>
using namespace std;
int main() {
int n, sw, sv, v[105], w[105], m[10005];  //n为物品数量,sw为总重量,sv为总价值
while(cin >> n >> sw) {      //m[j]为最少要拿总价值为j时所拿的最小质量
sv = 0;
for(int i = 1; i <= n; i++) { cin >> w[i] >> v[i]; sv += v[i]; }
for(int j = 1; j <= 10000; j++) m[j] = 1000000001;  //初始化为题目范围内最大值
for(int i = 1; i <= n; i++) {
for(int j = sv; j >= 1; j--) {
if(j >= v[i]) m[j] = min(m[j], m[j-v[i]]+w[i]);
else m[j] = min(m[j], w[i]);
//m[j] > 1000000000 ? cout << "+ " : cout << m[j] << " ";  //去掉这两行注释可打表结果
}
//cout << endl;
}
int big = 1;  //从价值为1开始找所有能拿到的价值
while(big <= sv && m[big] <= sw) big++;
cout << big-1 << endl;
}
}


代码实现(点击展开)
[b]开始写于:2016.5.20 ----志银[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: