hdu1789 简单贪心算法
2016-11-26 23:11
155 查看
题目大意
题目的意思 就是给出一个人接下来几个任务的 最后期限和不完成这些任务所扣除的分数
让你编写代码 求出扣除最小的分数
可以用简单的贪心算法来做
先用结构体存储并且自定义排序
排序的准则是 先按照扣除分数的大小排序 如果扣除分数大 那就放前面 如果扣除分数相同就把天数少的放前面
代码如下
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
struct Nod
{
int time,p;
};
int f[1001];
Nod s[1001];
int cmp(Nod a,Nod b)
{
if(a.p > b.p)
return 1;
else if(a.p == b.p &&a.time<b.time)
return 1;
else
return 0;
}
int main()
{
int t,n,i,j,a;
scanf("%d",&t);
while(t--)
{
memset(f,0,sizeof(f));
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d",&a);
s[i].time = a;
}
for(i = 0;i < n;i++)
{
scanf("%d",&a);
s[i].p = a;
}
int sum = 0;
sort(s,s+n+1,cmp);
for(i = 0;i < n;i++)
{
for(j = s[i].time; j > 0;j--)
{
if(!f[j])
{
f[j] = 1;
break;
}
}
if(j == 0)
sum += s[i].p;
}
cout<<sum<<endl;
}
return 0;
}
代码的关键就是下面这个循环
for(j = s[i].time; j > 0;j--)
{
if(!f[j]) //若f[j] = 1 表示这天已经被占据需要往前再找,如果没有为1则令f[j] = 1,表示这个任务在这天完成即可
{
f[j] = 1;
break;
}
}
if(j == 0) //j=0 表示 已经没有时间完成这个任务所以只好不完成并且扣除分数;
sum += s[i].p;
}
cout<<sum<<endl;
题目的意思 就是给出一个人接下来几个任务的 最后期限和不完成这些任务所扣除的分数
让你编写代码 求出扣除最小的分数
可以用简单的贪心算法来做
先用结构体存储并且自定义排序
排序的准则是 先按照扣除分数的大小排序 如果扣除分数大 那就放前面 如果扣除分数相同就把天数少的放前面
代码如下
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
struct Nod
{
int time,p;
};
int f[1001];
Nod s[1001];
int cmp(Nod a,Nod b)
{
if(a.p > b.p)
return 1;
else if(a.p == b.p &&a.time<b.time)
return 1;
else
return 0;
}
int main()
{
int t,n,i,j,a;
scanf("%d",&t);
while(t--)
{
memset(f,0,sizeof(f));
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d",&a);
s[i].time = a;
}
for(i = 0;i < n;i++)
{
scanf("%d",&a);
s[i].p = a;
}
int sum = 0;
sort(s,s+n+1,cmp);
for(i = 0;i < n;i++)
{
for(j = s[i].time; j > 0;j--)
{
if(!f[j])
{
f[j] = 1;
break;
}
}
if(j == 0)
sum += s[i].p;
}
cout<<sum<<endl;
}
return 0;
}
代码的关键就是下面这个循环
for(j = s[i].time; j > 0;j--)
{
if(!f[j]) //若f[j] = 1 表示这天已经被占据需要往前再找,如果没有为1则令f[j] = 1,表示这个任务在这天完成即可
{
f[j] = 1;
break;
}
}
if(j == 0) //j=0 表示 已经没有时间完成这个任务所以只好不完成并且扣除分数;
sum += s[i].p;
}
cout<<sum<<endl;
相关文章推荐
- POJ 2718简单枚举贪心算法(好久没写代码了。。)
- 1.3 mixing milk 简单贪心算法
- 1009 贪心算法 (简单分背包问题) 水题
- Codeforces 845 C. Two TVs 思路:简单贪心算法
- 51NOD - 贪心算法入门 - 独木舟问题 【简单贪心】
- 算法(八)简单的贪心算法
- 2037 今年暑假不AC 简单贪心算法
- 蓝桥杯-算法训练:最大最小公倍数(简单贪心算法)
- 【贪心算法】POJ-1862 简单哈夫曼
- 杭电ACM 今年暑假不AC 2037(关于最简单的贪心算法)
- 简单理解算法篇--贪心算法
- HDU 2037 今年暑假不AC (简单贪心算法)
- hdu 2570 //这题想到贪心法有些曲折哈 是一道简单的贪心算法(最优装载问题)
- 贪心算法最简单的硬币找钱问题
- POJ 1328 简单贪心算法
- 1.一些 贪心算法 的简单思维题:
- 删除字符——简单的贪心算法
- 1009 FatMouse’ Trade 简单贪心算法
- 51NOD - 贪心算法入门 - 活动安排问题 之 二【简单贪心 + 思维】
- L2-003. 月饼 (简单贪心算法)