8.4.2(部分背包问题)

来源:互联网 发布:nginx 日志记录真实ip 编辑:程序博客网 时间:2024/04/28 20:05

很简单的一道题目,,主要是因为题目中的那个最后一句话,价值和重量成正比,

所以,才得根据比值来排序的..

而且好像不能重载符号,,,

贴出代码:

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <string>using namespace std;const int maxn = 11111;int n;struct node{int w;int v;}t[maxn];bool cmp(const node &a, const node &b){return (a.v * 1.0 / a.w) > (b.v * 1.0 /b.w);}void Print(){for (int i = 0; i < n; i++){printf("w = %d  v = %d", t[i].w, t[i].v);cout << endl; }}int main(){int c;while (scanf("%d%d", &n, &c) != EOF && n != 0){for (int i = 0; i < n; i++){scanf("%d", &t[i].w);}for (int i = 0; i < n; i++){scanf("%d", &t[i].v);}sort(t, t + n, cmp);//Print();double w = 0;for (int i = 0; i < n; i++){if (t[i].w <= c){c = c - t[i].w;w += t[i].v;//cout << "c = " << c << endl;//cout << "w = " << w << endl;}else{w += c * (t[i].w * 1.0 / t[i].v);//cout << "w = " << w << endl;break;}}printf("%lf\n", w);}system("pause");return 0;}


原创粉丝点击