#include "iostream"
#include <algorithm> //need sort()
using namespace std;
//#define MAX 10
#define MAX 10002
struct Homwo //作页日期和分数的结构
{
int date;//结束时间
int score;//减少的分数
}p[MAX];
//以分数排名
bool cmp(const Homwo m,const Homwo n)
{
return m.score>n.score?1:0;
}
int main()
{
//freopen("in.txt","r",stdin);
int t; cin>>t;
//对于每一组测试数据
while (t--)
{
//输入学科数目
int n;int j;int i;
int vist[MAX]={0};//标记没有访问
int flag,k=0;
cin>>n;
//输入最后和减少的分数
for (i=1;i<=n;i++)
{
cin>>p[i].date;
}
for (i=1;i<=n;i++)
{
cin>>p[i].score;
}
sort(p+1,p+n+1,cmp);//注意数组时从1开始的!按学分排列
//开始处理
//i表示学科
for (i=1;i<=n;i++)
{
//如果这一天没有安排,
if(vist[p[i].date]==0)
vist[p[i].date]=1;//那么把这个学科安排到这一天
else
{
//想前推一天
for (j=p[i].date-1,flag=0;j>0;j--)
{
//这一天没有被安排,那么安排,如果被安排,那么就继续向前推
//j表示推到的天数
if(vist[j]==0)
{
vist[j]=1;
flag=1;
break;
}
}
//如果没有找到,那么要扣分。
if (flag==0)
{
for (j=n;j>p[i].date;j--)
{
if(vist[j]==0)
{
vist[j]=1;
k=k+p[i].score;
break;
}
}
}
}
}
//输出
cout<<k<<endl;
}
return 0;
}
hdoj1789(贪心算法)(一般来说,代价相同的都是用贪心的)
原文作者:贪心算法
原文地址: https://blog.csdn.net/longyuan20102011/article/details/7299714
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/longyuan20102011/article/details/7299714
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。