B3872 巧夺大奖 题解
博客中食用更佳~
题目传送门
Part 1.题目大意
很好理解,就是有
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;
}
任务完成!谢谢您的阅读~(可以顺手点个赞咩?)