1 条题解

  • 0
    @ 2025-8-24 21:15:38

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar cool_xu
    Why didn't i see, the forest on fire behind the snow.

    搬运于2025-08-24 21:15:37,当前版本为作者最后更新于2023-11-11 14:37:19,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    博客中食用更佳~

    题目传送门

    Part 1.题目大意

    很好理解,就是有 nn 个项目,每个项目有规定时限,时限内完成有奖金,求最多能得到多少奖金。

    Part 2.蒟蒻的思路

    一眼杀,贪心!

    (我是不会告诉你我写过差不多的的)

    以奖金为关键字进行排序,然后再按顺序将每个项目进行枚举,枚举这个项目的时限内有没有空闲时间来完成这个项目。如果有,就标记一下这个时间并将答案加上这个项目的奖金。(记住,得从大时间往小时间枚举!!!

    输出答案,完成!

    Part3.蒟蒻的代码

    #include <bits/stdc++.h> //万能头起手
    using namespace std;
    struct data{
    	int money,time;
    }a[10001]; //记录每个项目的数据以用来sort的结构体数组
    int n,m,b[10001];
    bool cmp(data x,data y){
    	return x.money>=y.money;
    } //sort排序的自定顺序函数
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a[i].time;
    	}for(int i=1;i<=n;i++){
    		cin>>a[i].money;
    	} //相信我,cin读入不会超时
       sort(a+1,a+1+n,cmp); //sort排序
    	for(int i=1;i<=n;i++){
    		bool c=false; //判断是否有空闲时间的布尔值
    		for(int j=a[i].time;j>=1;j--){ //从大时间往小时间枚举
    			if(b[j]==0){ //判断时间是否空闲
    				b[j]=1; //标记
    				c=true; //有空闲时间
    				break; //跳出
    			}
    		}if(c){ //好耶,项目可以完成
    			m+=a[i].money; //加奖金!
    		}
    	}cout<<m; //汇报一日战果
    	return 0;
    }
    

    任务完成!谢谢您的阅读~(可以顺手点个赞咩?)

    • 1

    信息

    ID
    9420
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者