| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3566 人关注过本帖
标题:宁波25届c++ 抓鱼
只看楼主 加入收藏
Jason_
Rank: 2
来 自:浙江台州
等 级:论坛游民
帖 子:88
专家分:66
注 册:2019-7-14
结帖率:66.67%
收藏
 问题点数:0 回复次数:7 
宁波25届c++ 抓鱼
题目描述
五一节放假了,小仪高高兴兴地去奶奶家玩。在去奶奶家的路上,有n个小池塘,池塘很浅很浅,所以没有危险的。每个池塘中有若干条鱼。抓同一个池塘中的每条鱼的时间是相同的,但抓不同池塘中的鱼的时间可能不同。
为了不让奶奶久等,小仪只有t分钟的时间能用来抓鱼。请问小仪最多能抓多少条鱼呢?
输入
输入文件fish.in的第一行有二个整数n和t,表示有n个池塘,小仪能使用t分钟时间抓鱼。n和t之间以一个空格分隔。  
第二行,有n个正整数,第i个正整数xi表示第i个池塘中有xi条鱼(每二个正整数之间有一个空格)。
第三行,有n个以空格分隔的正整数,第i个正整数yi表示第i个池塘中每抓一条鱼都需要yi分钟时间(每二个正整数之间有一个空格)。

输出
输出文件fish.out中只有一行,该行只有一个整数v,表示小仪最多能抓v条鱼。

样例
输入  复制
3 26
2 1 3
4 5 6
输出  复制
5
注:无视输入输出文件!
搜索更多相关主题的帖子: 表示 空格 输出 正整数 时间 
2020-02-28 20:06
Jason_
Rank: 2
来 自:浙江台州
等 级:论坛游民
帖 子:88
专家分:66
注 册:2019-7-14
收藏
得分:0 
回复 楼主 Jason_
明天要交,贴代码或者给点思路都可以,请大家尽快,谢谢!
2020-02-28 20:08
雪影辰风
Rank: 6Rank: 6
来 自:衡阳市
等 级:贵宾
威 望:22
帖 子:177
专家分:387
注 册:2019-6-17
收藏
得分:0 
回复 楼主 Jason_
数据范围?
2020-02-28 20:20
雪影辰风
Rank: 6Rank: 6
来 自:衡阳市
等 级:贵宾
威 望:22
帖 子:177
专家分:387
注 册:2019-6-17
收藏
得分:0 
这题的话我觉得用贪心可以
因为他规定在给定的t时间内,尽量抓最多的鱼
那么我们可以将每个池塘抓一条鱼的时间按升序排列,然后暴力的去取就行了,直至剩下的时间不够再抓任何一条鱼或者等于零就行了
2020-02-28 20:24
雪影辰风
Rank: 6Rank: 6
来 自:衡阳市
等 级:贵宾
威 望:22
帖 子:177
专家分:387
注 册:2019-6-17
收藏
得分:0 
我的初步思路是这么想的,你看看能不能写吧,不能写再说
2020-02-28 20:25
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
程序代码:
#include <iostream>

using namespace std;

int len = 3;
int all_time = 26;
int fish_nums[] = {2, 1, 3};
int cost_times[] = {4, 5, 6};
int catch_num[3];
int res[3]={0,0,0};
int get_sum(int catch_num[]) {
    int sum=0;
    for (int i = 0; i < len; i++) {
        sum+=catch_num[i]*cost_times[i];
    }
    return sum;
}
void catch_action(int index, int catch_num[],int all_val) {
    if (index >= len) {
        int sum = get_sum(catch_num);
        int old_sum = get_sum(res);
        if(sum <= all_val && old_sum < sum) {
            for (int i = 0; i < len; i++) {
                cout<<catch_num[i]<<", ";
            }        
            cout<<endl;
            for (int i = 0; i < len; i++) {
                res[i]=catch_num[i];
            }
        }
        return;
    }
    for (int j = 0; j <= fish_nums[index]; j++) {
        catch_num[index] = j;
        catch_action(index+1,catch_num,all_val);
    }
}

int main() {
    catch_action(0,catch_num,all_time);
    cout<<"\nresult:"<<endl;
    int count=0;
    for (int i = 0; i < len; i++) {
        cout<<res[i]<<", ";
        count+=res[i];
    }
    cout<<"\n:"<<count<< endl;
    return 0;
}

0, 0, 1,
0, 0, 2,
0, 0, 3,
0, 1, 3,
2, 0, 3,
result:
2, 0, 3,
:5

剑栈风樯各苦辛,别时冰雪到时春
2020-02-29 01:33
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:0 
是可以用贪心法,但是。。。我觉得暴力模拟也行

2020-03-05 18:53
slvy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-4-23
收藏
得分:0 
#include<bits/stdc++.h>
using namespace std;
struct st{
    int ts,sj,jz;
}a[50005];
bool camp(st x,st y){
    return x.sj<y.sj;
}
long long int s,n,e;
int main()
{
    cin>>n>>s;
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i].ts);
        
    for(int i=1;i<=n;i++)
        {
        scanf("%d",&a[i].sj);
        }
        
    sort(a+1,a+n+1,camp);
        
    for(int i=1;i<=n;i++)
        a[i].jz=a[i-1].jz+a[i].ts*a[i].sj;
   
    for(int i=1;i<=n;i++)
        {
            if(s<a[i].jz)   
                e+=(s-a[i-1].jz)/a[i].sj;
            else
                e+=a[i].ts;   
            
        }   
    cout<<e;   
}
2022-04-23 10:51
快速回复:宁波25届c++ 抓鱼
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044743 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved