捡苹果(贪心加背包)

news/2024/11/29 23:45:27/

题目如下:

以前,有个神秘的院子里面有三种苹果,每个苹果的数量是无限的。有一个小姑娘带了一个大袋子来到院子,她从来没见过这么多的苹果。每种苹果都有大小以及出售的价格,小姑娘想获得最大的利润,但是她不知道怎么才能做到。于是她来向你寻求帮助,你能告诉她能获得的最大价值吗?

第一行一个整数T(T <= 50),表示测试数据的组数。
每组测试数据有四行组成,前三行每行有两个整数S和P,分别表示每种苹果的大小(1 <= S <= 100)和价格(1 <= P <= 10000)
第四行有一个整数V(1 <= V <= 100,000,000)表示小姑娘袋子的大小。

刚看到这个题以为是完全背包,但是看完数据量之后看到背包大小为100000000,所以这个题肯定是不止要用完全背包就可以解决。然后就行到了贪心方法,先将大部分背包用性价比最高的方式填满,然后剩下的在使用完全背包求取最优值,此时的计算结果就可以将背包的价值最大化。

#include<iostream>
using namespace std;
#define ll long long
#include<algorithm>
#include<cstring>struct node
{ll x,y;double z;bool operator<(const node &q) const{return z>q.z;}
} a[4];
ll dp[1001];
int main()
{ll t;cin>>t;for(ll o=1; o<=t; o++){memset(dp,0,sizeof dp);for(int i=1; i<=3; i++){cin>>a[i].x>>a[i].y;a[i].z=(double)((double)a[i].y/(double)a[i].x);}sort(a+1,a+4);ll sum=0;ll bag;cin>>bag;if(bag>1000){sum+=((bag-1000)/a[1].x+1)*a[1].y;bag-=((bag-1000)/a[1].x+1)*a[1].x;}for(int i=1; i<=3; i++)for(int j=a[i].x; j<=bag; j++)dp[j]=max(dp[j],dp[j-a[i].x]+a[i].y);cout<<"Case "<<o<<": "<<sum+dp[bag]<<endl;}
}

http://www.ppmy.cn/news/455246.html

相关文章

捡金子

D e s c r i p t i o n Description Description 从前有一个迷宫&#xff0c;迷宫的外形就像一棵带根树&#xff0c;每个结点&#xff08;除了叶子结点外&#xff09;恰好有 KK 个儿子。 一开始你在根结点&#xff0c;根结点的 KK 个儿子分别标记为‘A’, ‘B’, ‘C’….,而…

现在捡芝麻都需要有见识吗?

俺爸每次在说教时候会说&#xff0c;就没看你读过一本完整的书&#xff0c;哪怕一本杂志。其实也不是没有读过&#xff0c;只不过读的少。 这几天看了硅谷来信第二十封&#xff0c;讲的是芝麻和西瓜的故事。道理简单&#xff0c;但做起来难。 人总是在芝麻与西瓜之间患得患失&a…

捡捡拾拾

被质问&#xff0c;你是不是一个真正的PHPer。我说&#xff0c;我第一门用于开发网站的语言就是PHP&#xff0c;没有什么好质疑的&#xff0c;都用了三年了&#xff0c;像是自己的第二语言一样。 要是这样为什么不去看看Perl呢&#xff1f;也许是另一种不错的选择。 PHP主要是架…

捡水果

蒜头在玩一款游戏&#xff0c;他在一个山顶&#xff0c;现在他要下山&#xff0c;山上有许多水果&#xff0c;蒜头每下一个高度就可以捡起一个水果&#xff0c;并且获得水果的能量。山的形状如图所示&#xff1a; 1 3 2 1 2 3 6 2 3 4 3 5 4 1 这是一个高度为 44 的山&#xff…

捡贝壳

捡贝壳 链接&#xff1a;https://ac.nowcoder.com/acm/contest/13504/E 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 小明来到一片海滩上&#xff0c;他很喜欢捡贝壳&…

捡金币

80分做法 DP本格子是从上个时间能够到达该格子的位置拓展出来的&#xff0c;可以闪现也可以步行&#xff08;注意可以不动&#xff09; 对这些状态取max即可 我们枚举时间&#xff0c;f[t][i][j][k]表示第t秒站在(i,j),已经用了k次闪现所获得的最大金币数 转移方程见代码&a…

捡点我的职业生涯

十五年前&#xff0c;你或许还不懂爱情&#xff0c;看Jack和Rose执手相看泪眼&#xff0c;只是蒙胧的心痛。十五年后&#xff0c;你会和谁一起走进影院&#xff0c;更会和谁一起&#xff0c;走到生命终点。 十五年前&#xff0c;我还不太懂技术&#xff0c;凭兴趣玩着C语言。十…

捡的

说好的教我一个简单的JS&#xff0c;时间一到立马陪嫂子打电话去了。哥&#xff0c;你果然是伯母捡来的。。。 转载于:https://www.cnblogs.com/bingg/p/5313851.html