hdu1789 Doing homework again
2015-09-07 23:12
393 查看
分析:
简单贪心,一开始没想到思路。
很直观的,第一步按照score从大到小排序,如果score
相等,则按照deadline从小到大排。
然后开始选择,让当前的课排在其deadline上面,如果
这一天已经被占用了,那么就往前循环,有位置了就安排,
没了就ans+=score。
// Created by Chenhongwei in 2015.
// Copyright (c) 2015 Chenhongwei. All rights reserved.
#include"iostream"
#include"cstdio"
#include"cstdlib"
#include"cstring"
#include"climits"
#include"queue"
#include"cmath"
#include"map"
#include"set"
#include"stack"
#include"vector"
#include"sstream"
#include"algorithm"
using namespace std;
typedef long long ll;
struct data
{
int s,d;
}a[1010];
bool cmp(data x,data y)
{
if(x.s!=y.s)
return x.s>y.s;
return x.d<y.d;
}
int h[1010];
int main()
{
//ios::sync_with_stdio(false);
// freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int T;
cin>>T;
while(T--)
{
memset(h,0,sizeof h);
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].d;
for(int i=1;i<=n;i++)
cin>>a[i].s;
sort(a+1,a+n+1,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
int flag=0;
for(int j=a[i].d;j>=1;j--)
if(!h[j])
{
h[j]=1;
flag=1;
break;
}
if(!flag)ans+=a[i].s;
}
cout<<ans<<endl;
}
return 0;
}
简单贪心,一开始没想到思路。
很直观的,第一步按照score从大到小排序,如果score
相等,则按照deadline从小到大排。
然后开始选择,让当前的课排在其deadline上面,如果
这一天已经被占用了,那么就往前循环,有位置了就安排,
没了就ans+=score。
// Created by Chenhongwei in 2015.
// Copyright (c) 2015 Chenhongwei. All rights reserved.
#include"iostream"
#include"cstdio"
#include"cstdlib"
#include"cstring"
#include"climits"
#include"queue"
#include"cmath"
#include"map"
#include"set"
#include"stack"
#include"vector"
#include"sstream"
#include"algorithm"
using namespace std;
typedef long long ll;
struct data
{
int s,d;
}a[1010];
bool cmp(data x,data y)
{
if(x.s!=y.s)
return x.s>y.s;
return x.d<y.d;
}
int h[1010];
int main()
{
//ios::sync_with_stdio(false);
// freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int T;
cin>>T;
while(T--)
{
memset(h,0,sizeof h);
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].d;
for(int i=1;i<=n;i++)
cin>>a[i].s;
sort(a+1,a+n+1,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
int flag=0;
for(int j=a[i].d;j>=1;j--)
if(!h[j])
{
h[j]=1;
flag=1;
break;
}
if(!flag)ans+=a[i].s;
}
cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- uva 11374 - Airport Express(最短路)
- HDU2.2.7 Train Problem II
- 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)
- uva 1048 - Low Cost Air Travel(最短路)
- HDU 3376 费用流 Matrix Again
- APR分析-整体篇 http://blog.csdn.net/jmshl/article/details/6773731
- Aittit.attilax超级框架 api 规划大全
- Aittit.attilax超级框架 api 规划大全
- LA 3231 Fair Share 【二分+最大流】
- HDU 5239 Doom The 2015 ACM-ICPC China Shanghai Metropolitan Programming Contest
- MongoDB错误2_启动mongodb时遇到child process failed,existed with error number 100错误
- The Pros and Cons of Pair Programming
- HDU 3394 Railway
- 1079. Total Sales of Supply Chain (25)
- two sample ttest & paired ttst
- Aittit.attilax超级框架 api 规划大全
- 线上问题分析:The target server failed to respond(目标服务器返回失败)
- error C2440: “初始化”: 无法从“const char *”转换为“ATL::CStringT<BaseType,StringTraits>”
- ARC下强引用弱引用retainCount增减规律
- [9-5]Mail机制和任务计划at、batch、crontab知识梳理和课后练习