hdu1789(贪心)
2016-04-09 16:39
246 查看
题意:Ignatius有N项作业要完成。每项作业都有限期,如果不在限期内完成作业,期末考就会被扣相应的分数。给出测试数据T表示测试数,每个测试以N开始(N为0时结束),接下来一行有N个数据,分别是作业的限期,再有一行也有N个数据,分别是若不完成次作业会在期末时被扣的分数。求出他最佳的作业顺序后被扣的最小的分数。(每个作业费时一天)。
思路:使用一个结构体保存每门作业的限制时间和被扣的分数。
对限制时间排序,限制越大的要越先完成,若托限制时间一样,则把被扣分数大的排在前面,保证被扣分数达的要先完成。这就保证了完成的作业数做多。但是这样排序后,产生了一个问题,完成的作业数做多,被扣的分数不一定是最小;
所以做法是:设一个mark数组,标记能够完成的。然后对排序后的结构体数据进行for循环,遇到(day < deadline(即现在的时间不超过限制时间)则表示这个作业可以完成,)
{所以day++,同时mark[i]要标记这个作业可以完成。}
Else(day>=deadline,则证明这个作业放在这里做没办法完成的。)
{
考虑在前面标记过的可完成的作业,是否有某个作业的reduce比目前的ruduce小。
If(如果有)
{则证明,可以选择完成当前的这个作业,而不完成前面reduce比当前小的作业,所以两个作业的reduce交换。}
Else(如果没有)
{则什么都不操作,进入下一次循环}
}
代码:
思路:使用一个结构体保存每门作业的限制时间和被扣的分数。
对限制时间排序,限制越大的要越先完成,若托限制时间一样,则把被扣分数大的排在前面,保证被扣分数达的要先完成。这就保证了完成的作业数做多。但是这样排序后,产生了一个问题,完成的作业数做多,被扣的分数不一定是最小;
所以做法是:设一个mark数组,标记能够完成的。然后对排序后的结构体数据进行for循环,遇到(day < deadline(即现在的时间不超过限制时间)则表示这个作业可以完成,)
{所以day++,同时mark[i]要标记这个作业可以完成。}
Else(day>=deadline,则证明这个作业放在这里做没办法完成的。)
{
考虑在前面标记过的可完成的作业,是否有某个作业的reduce比目前的ruduce小。
If(如果有)
{则证明,可以选择完成当前的这个作业,而不完成前面reduce比当前小的作业,所以两个作业的reduce交换。}
Else(如果没有)
{则什么都不操作,进入下一次循环}
}
代码:
#include<stdio.h> #include<algorithm> #include<iostream> using namespace std; struct node { int x,y; }a[1005]; int mark[1005]; bool cmp(const node t1,const node t2) { if(t1.x!=t2.x) return t1.x<t2.x; else return t1.y>t2.y; } int search(node b[],int v,int w) { int zz=-1,min=v; for(int i=0;i<w;i++) if(mark[i]&&min>b[i].y) { min=b[i].y; zz=i; } return zz; } int main() { int t,n; scanf("%d",&t); while(t--) { int n,i,j,s=0,min; scanf("%d",&n); memset(mark,0,sizeof(mark)); for(i=0;i<n;i++) scanf("%d",&a[i].x); for(i=0;i<n;i++) scanf("%d",&a[i].y); sort(a,a+n,cmp); min=a[0].y; int day=1; for(i=0;i<n;i++) if(day<=a[i].x) { day++; mark[i]=1; } else { int ex=search(a,a[i].y,i); if(ex!=-1) { int cc=a[ex].y; a[ex].y=a[i].y; a[i].y=cc; } s=s+a[i].y; } printf("%d\n",s); } }
相关文章推荐
- DOS下的常用的cd命令
- java中一个接口可以继承几个接口
- java中抽象类和接口的区别
- 【Android基础】常用的布局和单位的简介
- 区间互素(筛法欧拉函数模板+容斥原理)(1695)
- SpringMVC的注解命名方式
- Invalid location of tag
- PHP Callback 回调类型
- Linux压缩和解压缩文件
- UIImage的scale
- 解决编译Apache出现的问题:configure: error: APR not found . Please read the documentation
- linux文件系统
- 算法初探——选择排序
- cocos2d-x v3.6移植Android
- 第六章:Shiro的Realms
- Ubuntu下安装Tomcat
- html5 video播放调研,全屏,伪全屏
- Android RecyclerView实现瀑布流布局
- 黄金点游戏
- 数据库事务