HDU.2111 Saving HDU(贪心)
-
题目来源:Saving HDU
-
题意分析:
XHD有个容量为v的口袋,有n个宝贝,每种宝贝的价值不一样,每种宝贝单位体积的价格也不一样,宝贝可以分割,分割后的价值和对应的体积成正比。求XHD最多能取回多少价值的宝贝? - 我的思路
一开始我没想明白,认为给的价值是一种宝贝的总价值,所以样例我都解释不了,想到给的价值是单位体积的价值,而不是总价值,就可以解释了,理解题意是很重要的,要不然下不去手啊Orz.
接下来就是贪心了,体积都是一样的,如果想要拿到价值最高的东西,那么每体积的价值都要尽可能高才行,所以策略就是每次取一体积价值最高的宝贝,直到放不下为止。
那么就是按照价值的大小从降序排列,最后输出答案。 - 完整代码:
#include<stdio.h>
typedef struct
{
int volume; //该种宝贝的总体积
int value; //单位体积的价值,不是总价值
}goods;
int main(void)
{
int v, n, i, j,ans, t; //口袋容量卡v,宝贝种类n,总价值ans,累计宝贝的体积t
goods a[101], temp;
while (scanf("%d", &v) && v != 0)
{
ans = 0, t = 0;
scanf("%d",&n); //读入宝贝种类n
for (i = 0; i < n; i++)
scanf("%d%d",&a[i].value,&a[i].volume);
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (a[j].value < a[j + 1].value)
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (i = 0; i < n; i++)
{
if (v == t)
break;
for (j = 0; j < a[i].volume; j++)
{
if (v == t)
break;
else
{
ans += a[i].value;
t++;
}
}
}
printf("%d\n",ans);
}
return 0;
}
(。・∀・)ノ
分类:
Algorithm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架