admin 管理员组

文章数量: 1086019

[截止时间 贪心算法]某学科老师布置了n个题目,每个题目都有相应的分数及截止日期。各个题目的分数及截止日期可能并不相同。对某题目而言,如果在该题目的截止日期前完成则可获得对应的分数,否则无法得分。

 

对该实例而言,得分最大的作业完成方案为花费4天时间依次完成题目2,6,3,7。得分为15。

【输入形式】 

输入数据第一行为一个整数n (0 <= n <= 10000), 表示题目数目
之后n行各有两个整数, 第i行为 pi, di (1 <= pi, di <= 10000),分别表示第i个题目的分数和截止时间

【输出形式】

【样例输入】

4 
50 2 
10 1 
20 2 
30 1

【样例输出】

80

C++代码实现如下:

 #include<iostream>#include<algorithm>#include<cstring>using namespace std;struct node{long p,d;bool operator < (const node& a)const{return p>a.p;}};long n;node a[10000];long  vis [10000];int main(){cin>>n;for(long i=0;i<n;i++){cin>>a[i].p>>a[i].d;}sort(a,a+n);memset(vis,0,sizeof(vis));long sum=0;for(long i=0;i<n;i++){for(long j=a[i].d;j>=1;j--){if(!vis[j]){vis[j]=1;sum+=a[i].p;break;}}}cout<<sum<<endl;}

本文标签: 截止时间 贪心算法某学科老师布置了n个题目,每个题目都有相应的分数及截止日期各个题目的分数及截止日期可能并不相同对某题目而言,如果在该题目的截止日期前完成则可获得对应的分数,否则无法得分