鱼C论坛

 找回密码
 立即注册
查看: 1764|回复: 6

[已解决]【C++板块提升计划】梦想护卫舰 第8关 鱼C旅行团【答题有奖】 【原创】

[复制链接]
发表于 2023-1-10 09:09:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhangjinxuan 于 2023-1-16 11:05 编辑


上一关: 逃离荒岛

梦想护卫舰 第8关 鱼C旅行团 正常题型


修好零件出发没多久,小甲鱼 和 不二如是 坐着私人游艇赶了过来……

不二如是 见到我们之后,兴奋的说道:

”啊,勇敢的鱼油们,为了感谢你们救了我,我决定……“
”带你们去旅游!“


你们听到这个消息后,非常兴奋

可是小甲鱼说:

不过现在有一些问题,我们旅游不知道每个东西该带几个,因为我们的船是有限的,每个船的容积也可能不一样,而且这些东西,也各有各自的重量和价值……


题目

现在一共有 n 艘船可以用来装旅游所要带的物品,第 i 艘船的装载极限是 ai,另外,还有 m 个物品,其中,第 i 个物品重量是 vi,实际的价值是 wi,不过好在,每个物品都有无穷

请问,在每艘船不超重的情况下,能获得的最大价值是多少?

注意:当然不能用两艘船装一件物品

你能解决这个问题吗?

输入格式
第一行两个数字,分别表示 n, m
第二行 n 个数字,第 i 个数字也就是 ai
接下来 m 行,每行两个数字,第 i 行内容分别是 vi, wi
n m
a1 a2 ... a n
v1 w1
v2 w2
...
vm wm

输出格式
一个数字,表示能获得的最大价值

输入样例
1 5
10
5 3
3 6
7 8
5 9
2 4
输出样例
20

数据范围
所有数据 <= 200

其他说明
题目、题解为个人原创,时间限制 1s,空间限制 256mb



                               
登录/注册后可看大图


答案与解析
游客,如果您要查看本帖隐藏内容请回复
[/hide]
下一篇:https://fishc.com.cn/forum.php?mod=viewthread&tid=223520
最佳战士排行榜
第一名第二名第三名
名字ExiaGN001等待着勇敢细心聪明的鱼油~
链接戳我
代码得分100
综合评分100
奖励鱼币荣誉共8个+最佳答案鱼币荣誉共8个鱼币荣誉共4个


如果你喜欢,别忘了评分
最佳答案
2023-1-11 13:01:19
我的答案,请帮忙评测一下:
#include<bits/stdc++.h>
using namespace std;
#define v(i) v[i].first
#define w(i) v[i].second
bool cmp(pair<int,int> a,pair<int,int> b)
{
        double avea=((double)a.second/(double)a.first);
        double aveb=((double)b.second/(double)b.first);
        return  avea==aveb?(a.first<b.first):avea>aveb;
}
int main()
{
        int n,m;
        cin>>n>>m;
        int a[250];
        pair<int,int> v[250];
        for(int i=0;i<n;i++)cin>>a[i];
        for(int i=0;i<m;i++)cin>>v(i)>>w(i);
        sort(v,v+m,cmp);
        //for(int i=0;i<m;i++)cout<<v(i)<<" "<<w(i)<<" "<<(double)w(i)/(double)v(i)<<"\n";
        //开始装包!
        int b[250];
        int ans=0;
        memset(b,0,sizeof(b));
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<m;j++)
                {
                        while(a[i]>=v(j))
                        {
                                a[i]-=v(j);
                                b[i]+=w(j);
                        }
                }
                ans+=b[i];
        }
        cout<<ans;
        return 0;
}

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
ExiaGN001 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-10 09:19:10 | 显示全部楼层
顶顶顶~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-10 09:55:23 | 显示全部楼层
顶·
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-11 10:14:47 | 显示全部楼层
哈哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-11 12:48:44 | 显示全部楼层
多重背包?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-11 12:52:54 | 显示全部楼层

多个完全背包……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-11 13:01:19 | 显示全部楼层    本楼为最佳答案   
我的答案,请帮忙评测一下:
#include<bits/stdc++.h>
using namespace std;
#define v(i) v[i].first
#define w(i) v[i].second
bool cmp(pair<int,int> a,pair<int,int> b)
{
        double avea=((double)a.second/(double)a.first);
        double aveb=((double)b.second/(double)b.first);
        return  avea==aveb?(a.first<b.first):avea>aveb;
}
int main()
{
        int n,m;
        cin>>n>>m;
        int a[250];
        pair<int,int> v[250];
        for(int i=0;i<n;i++)cin>>a[i];
        for(int i=0;i<m;i++)cin>>v(i)>>w(i);
        sort(v,v+m,cmp);
        //for(int i=0;i<m;i++)cout<<v(i)<<" "<<w(i)<<" "<<(double)w(i)/(double)v(i)<<"\n";
        //开始装包!
        int b[250];
        int ans=0;
        memset(b,0,sizeof(b));
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<m;j++)
                {
                        while(a[i]>=v(j))
                        {
                                a[i]-=v(j);
                                b[i]+=w(j);
                        }
                }
                ans+=b[i];
        }
        cout<<ans;
        return 0;
}

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zhangjinxuan + 5 + 5 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 00:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表