P2240 【深基12.例1】部分背包问题

oWuGi7s6 Lv1

题目:

题目描述

阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 堆金币,第 堆金币的总重量和总价值分别是 。阿里巴巴有一个承重量为 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币?

输入格式

第一行两个整数 。

接下来 行,每行两个整数 。

输出格式

一个实数表示答案,输出两位小数。

输入输出样例 #1

输入 #1
4 50
10 60
20 100
25 100
15 45

输出 #1
240.00

题解:

#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
struct Node{
double m;
double v;
double b;
} a[10000];
bool cmp(Node x,Node y)
{
return x.b>y.b;
}
int main()
{
int n,t;
cin>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>a[i].m>>a[i].v;
a[i].b=a[i].v/a[i].m;
}
sort(a+1,a+n+1,cmp);
double ans=0;
for(int i=1;i<=n;i++)
{
if(t<=0) break;
if(t-a[i].m>0)
{
ans+=a[i].v;
t-=a[i].m;
}
else
{
ans+=a[i].b*t;
break;
}
}
cout<<fixed<<setprecision(2)<<ans;
return 0;
}
  • 标题: P2240 【深基12.例1】部分背包问题
  • 作者: oWuGi7s6
  • 创建于 : 2026-10-24 21:59:34
  • 更新于 : 2026-11-01 19:52:33
  • 链接: https://owugi7s6.netlify.app/2026/10/24/p2240/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
P2240 【深基12.例1】部分背包问题