博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
贪心初步 hdu1789 Doing Homework again
阅读量:6540 次
发布时间:2019-06-24

本文共 1946 字,大约阅读时间需要 6 分钟。

一道非常经典的题目

题目大意

给出N个作业的截至日期,和N个作业不交所扣掉的分数,要求输出扣除分数做少的方案。

正确的策略是:

  1. 扣除分数大的先做
  2. 扣除分数相同,先截止的先做
  3. 做一件事的时候,从截止时间开始向第一天遍历,如果当天没有被作业占据则标记为占据。做这件事的日期越大越好。
  4. 如果不能满足3的条件,则为不能完成
1 #include 
2 #include
3 #include
4 #include
5 6 #define MAX 1010 7 8 using namespace std; 9 int V[MAX];10 int E[MAX];11 bool t[MAX];12 int order[MAX];13 14 void init()15 {16 memset(t,0,MAX * sizeof(bool));17 return ;18 }19 20 bool cmpA (int a ,int b)21 {22 if(V[a] > V[b])23 {24 return 1;25 }26 else if(V[a] == V[b] && E[a] < E[b])27 {28 return 0;29 }30 else 31 return 0;32 }33 34 int main()35 {36 int T;37 while(~scanf("%d",&T))38 {39 for (int i = 0; i < T; ++i)40 {41 init();42 int N;43 int All = 0;44 int ans = 0;45 scanf("%d",&N);46 for (int j = 0; j < N; ++j)47 {48 scanf("%d",&E[j]);49 }50 for (int j = 0; j < N; ++j)51 {52 scanf("%d",&V[j]);53 All = All + V[j];54 order[j] = j;55 }56 //57 sort(order,order + N,cmpA);58 /////59 //60 for (int j = 0; j < N; ++j)61 {62 int event = order[j];63 bool flag = 0;64 for (int k = E[event]; k >= 1; k--)65 {66 if(!t[k])67 {68 ans = ans + V[event];69 t[k] = 1;70 flag = 1;71 }72 if(flag) break;73 }74 }75 ///76 cout << All - ans << endl;77 78 }79 }80 return 0;81 }

 

转载于:https://www.cnblogs.com/ticsmtc/p/4969559.html

你可能感兴趣的文章
转:iOS基于MVC的项目重构总结
查看>>
Tire树
查看>>
Multi-voltage和power gating的实现
查看>>
JavaScript面向对象 ~ 原型和继承(1)
查看>>
ubuntu下安装nginx时依赖库zlib,pcre,openssl安装方法
查看>>
spring cloud微服务分布式云架构--hystrix的使用
查看>>
linux tail
查看>>
解决Mac启动Eclipse Memory Analyzer报错问题
查看>>
jquery的$().each,$.each的区别
查看>>
mysql 缓存开启及测试
查看>>
自己写的进度条###
查看>>
windows磁盘扩容(动态磁盘)
查看>>
在jsp页面中添加富文本编译器(ueditor)+ 图片上传功能
查看>>
fedora12下安装oracle11客户端
查看>>
实现批量添加20个用户,用户名为user1-50,密码为user后面跟5个随机字符
查看>>
LVM磁盘管理
查看>>
Net命令详解
查看>>
CentOS linux 高可用集群之heartbeat
查看>>
用bat更改hosts文件批处理
查看>>
Logwatch日志分析工具
查看>>