P的题意是有M份作业,这些作业有不同的截止日期,超过截止日期完成,不同的作业有不同的罚分,求如何完成罚分最低。

首先,从截止日期最长的那个作业到截止日期,这些天数是固定的,所做的就是把这些作业填进这些天。很明显的贪心,把作业按从大到小罚分排序,罚分截止日期越近的放在前面,然后通过枚举把作业往时间轴里放,知道这些天数被填满。

 #include <iostream>
#include <algorithm>
#include <cstdio>
#include <map>
#include <string>
#include <string.h>
#include <queue>
#include <vector>
using namespace std;
struct subject{
int point;
int time;
};
int compare(struct subject a,struct subject b)
{
if(a.point!=b.point)
{
if(a.point>b.point)
return ;
else return ;
}
else {
if(a.time<b.time)
return ;
else return ;
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<n;i++)
{
int m;
int sum=;
int flag[]={};
struct subject sb[];
int a[]={};
int b[]={};
scanf("%d",&m);
for(int j=;j<m;j++)
{
scanf("%d",&a[j]);
sb[j].time=a[j];
}
for(int h=;h<m;h++)
{
scanf("%d",&b[h]);
sb[h].point=b[h];
}
sort(sb,sb+m,compare);
for(int g=;g<m;g++)
{
for(int j=sb[g].time;j>=;j--)
{
if(!flag[j]&&j)
{
flag[j]=;
break;
}
if(!j)
sum+=sb[g].point;
}
}
printf("%d\n",sum);
}
return ;
}

Q的题意其实跟DOTA没啥关系,可以理解成回合制游戏,只不过每次都是敌人先攻击你,你的血量无限,不过你每次只能打对方一点血,对方有DFS(每次攻击你掉的血)和HP(血量)两个特征,求把他们打死,你消耗的最少血量。既然是贪心,就要排序,按DFS排还是按HP排呢,都不是,因为你优先要打的是,HP低&&攻击力强的敌人,所以应该优先打DFS/HP大的敌人。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <map>
#include <string>
#include <string.h>
#include <queue>
#include <vector>
using namespace std;
struct hero{
int dps;
int hp;
};
int compare(struct hero a,struct hero b)
{
if((a.dps*1.0/a.hp)>(b.dps*1.0/b.hp))
return ;
else return ;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sum=;
struct hero a[];
for(int i=;i<n;i++)
scanf("%d%d",&a[i].dps,&a[i].hp);
sort(a,a+n,compare);
for(int j=;j<n;j++)
{
for(int h=j;h<n;h++)
{
sum+=a[h].dps*(a[j].hp);
}
}
printf("%d\n",sum);
}
return ;
}

R题,题意很简单,有n个机器,m个任务,每个机器和任务都对应着 time和level两个量,只有机器的时间和等级都大于等于任务时,才能完成任务,求完成任务的最大数量,多解考虑利润最多的情况,利润是任务的时间*500+等级*2;

因为任务的时间权重很高,所以可以直接忽略利润这个东西。

我本来的想法是,从最简单地任务开始(简单就是时间少且等级低,首要看时间)每个任务,都从最烂的机器(烂机器就是时间少,等级低)开始匹配,匹配上的机器用flag标记,结果超时了,确实,这么做太暴力,因为任务的简单和机器的烂是有联系的,特别是当他们被排好顺序的时候。最后借鉴了别人的方法。从最难的任务开始,然后先挑出一部分时间上满足的机器,然后再看等级。再下一个任务,因为排好序所以比上一个任务简单,可以继续用到上一次被挑出来的机器,还可以继续挑选机器,节省了时间。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <map>
#include <string>
#include <string.h>
#include <queue>
#include <vector>
using namespace std;
struct com{
int time;
int level;
};
int compare(struct com a,struct com b)
{
if(a.time!=b.time)
{
if(a.time>b.time)
return ;
else return ;
}
else return a.level>b.level;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
struct com mac[];
struct com task[];
int flag[]={};
int cnt=;
long long sum=;
for(int i=;i<n;i++)
scanf("%d%d",&mac[i].time,&mac[i].level);
for(int j=;j<m;j++)
scanf("%d%d",&task[j].time,&task[j].level);
sort(mac,mac+n,compare);
sort(task,task+m,compare);
for(int i=,j=;i<m;i++)
{
while(j<n&&mac[j].time>=task[i].time)
{
flag[mac[j].level]++;
j++;
}
for(int h=task[i].level;h<=;h++)
{
if(flag[h])
{
flag[h]--;
cnt++;
sum+=*task[i].time+*task[i].level;
break;
}
}
}
printf("%d %lld\n",cnt,sum);
}
return ;
}

寒假作业第二组P&&Q&&R题解的更多相关文章

  1. 寒假作业第二组C题题解

    这道题题意很简单,主要是练习map的使用.看输入有三个数据,水果名,地名,和出现次数.再看输出,很容易想到map<string,int> string是水果,int是次数,那个地名怎么用m ...

  2. 寒假作业第二组E题题解

    注意看题,注意看题,注意看题.重要的事情三遍感觉都不够.不怕大家笑话,这道题RuntimeError 9次,我一直以为是哪里越界了,结果最后发现的时候,真是无语了,题目里说了,所有的integer都不 ...

  3. Hdu1015&&寒假作业第二组I题

    题意是A-Z对应1-26,然后给个目标数字和字符串,看看字符串里的某5个字符的组合能不能使v - w^2 + x^3 - y^4 + z^5 = target等式成立,其实多写几个循环也可以达到目的, ...

  4. FJUT寒假作业第二周C题解(位运算)

    题目来源:http://210.34.193.66:8080/vj/Contest.jsp?cid=161#P2 题意比较好理解.如果直接按题目要求一步一解.一定超时.作为一个懒人也不会这么暴力一个肯 ...

  5. FJUT寒假作业第二周G题解快速幂

    题目来源:http://210.34.193.66:8080/vj/Contest.jsp?cid=161#P6     题意:求n个数字的乘积对c取摸.主要就是有快速幂扩展到广义幂的过程. 首先题目 ...

  6. 寒假作业第二篇随笔(A+B)

    Github链接:https://github.com/heihuifei/object-oriented A+B Format (20) Calculate a + b and output the ...

  7. 【GDKOI2014】JZOJ2020年8月13日提高组T3 壕壕的寒假作业

    [GDKOI2014]JZOJ2020年8月13日提高组T3 壕壕的寒假作业 题目 Description Input Output 输出n行.第i行输出两个整数,分别表示第i份作业最早完成的时刻以及 ...

  8. 2016蓝桥杯省赛C/C++A组第六题 寒假作业

    题意:现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □ 每个方块代表1~13中的某一个数字,但不能重复. 比如: ...

  9. NOIP提高组2004 合并果子题解

    NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...

随机推荐

  1. mysql八:ORM框架SQLAlchemy

    阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...

  2. 分享知识-快乐自己:Struts2 - result标签的name属性和type属性

    1):result的name属性   例如:<result name="success">/pages/success.jsp</result> Strut ...

  3. jsp日期插件My97DatePicker 强大的日期控件 使用方便简单(转)

    本文属转载(希望对编程爱好者有所帮助)详情请访问官方网站 http://www.my97.net/dp/index.asp 一. 简介 1. 简介 目前的版本是:4.7 2. 注意事项 My97Dat ...

  4. hdu-5862 Counting Intersections(线段树+扫描线)

    题目链接: Counting Intersections Time Limit: 12000/6000 MS (Java/Others)     Memory Limit: 65536/65536 K ...

  5. RTSP协议

        1.RTSP与几个相关协议 RTSP(Real Time Streaming Protocol)实时流协议,是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通 ...

  6. ACM学习历程—Hihocoder 1164 随机斐波那契(数学递推)

    时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 大家对斐波那契数列想必都很熟悉: a0 = 1, a1 = 1, ai = ai-1 + ai-2,(i > 1). ...

  7. 【win10激活问题】 从【win10专业工作站版】转为 数字许可证的【win10专业版】

    今天安装了 win10 1903 (10.0.18362 暂缺 Build 18362) 安装时 选的 是[win10 专业工作站版] 却无法激活, (因为当初是从win7升级上win10的,只有关联 ...

  8. go http 下载视频(TS码流文件)(推荐一个网站学习 go example)

    视频  http下载代码 dn.go(注意:代码很ugly,没怎么花时间) 总体感觉特别简单,网上看了下 net/http ,io这2个库的使用, 几分钟就写完了,感觉cpp 在做工具这块 开发效率的 ...

  9. PPI协议详解 ppi通讯协议 ppi通信协议 vb与ppi协议通讯

    转自:http://blog.csdn.net/vbvcde/article/details/7660497 我们提供 PPI协议的官方文档,协议更新时间为2005年,下面是我们根据文档解析的PPI读 ...

  10. Runtime.getRuntime()

    1转自:https://www.aliyun.com/jiaocheng/849282.html 那就首先说点Runtime类吧,他是一个与JVM运行时环境有关的类,这个类是Singleton的.我说 ...