10347 忙碌又贪心的泥瓦匠
时间限制:1000MS 内存限制:65535K 提交次数:8 通过次数:4
语言: not limited
描述
村里有唯一一个泥瓦匠叫Kemo,很多人需要找Kemo修房子、修灶台、造花园……等,大家可以向Kemo预约修葺的时间和工钱。
现在情况是:
1)Kemo只有一个人,不能同时为两个雇主工作
2)Kemo只有干完一个雇主家的活才可以在接下来的一天切换到另一个雇主家里干活。未干完一份活不可以离开,不可以为多位雇主交叉时间干活
3)Kemo如果不能在预约的时间那天应约的话,这个雇主的这份钱就挣不到了
Kemo比较聪明,他把大家的预约收集好,想让自己忙碌一阵子,赚最多的钱。现在请你为这个忙碌而又贪心的Kemo设计一个思路吧。
输入格式
输入4行:
第一行,一个数字,n,表示n个人向Kemo预约需要修葺(n<=100)
第二行,n个正数,表示这n个人所需完成修葺的时间的起始点。若时间点为8,表示第8天开始
第三行,n个正数,表示这n个人所需完成修葺的工程天数。若天数为3,表示这一工程必须维持3天完成(所有工程都可以在第1000天内完成,即起始点+工期<=1000)
第四行,n个正数,表示这n个人能向Kemo付出的工钱,工钱以每天计
输出格式
输出:忙完这阵子,Kemo最多能挣多少钱?
例如:4个人需要找Kemo修葺,起始时间、工期和每天的工钱分别是:
1 3 8 4
3 2 3 2
5 6 10 7
则:Kemo可以获得的最大收益为:5*3+10*3+7*2 = 59
输入样例
4
1 3 8 4
3 2 3 2
5 6 10 7
输出样例
32
59
Hint
此题标题虽有“贪心”,但勿掉入贪心的陷阱中哦(贪心法是解不了滴)。
每项工程有“起始时间”,“工期”和“工钱数”三个性质。若两个工程的从起始时间到结束都不相冲突,就定义这两个工程为“相容工程”。
做子集树,根结点为第1层,叶节点为n+1层。子集树的第i层结点的两个分支代表第i个工程选或者不选。
用回溯算法搜索这n+1层的完全二叉树。
1)若当前工程和之前已选的工程集合不相容,则剪去该分支,不进行该分支之下的搜索,返回到上层结点。
2)将所有满足相容性的可行的叶节点,计算获得的最大工钱数。
-----------------------------------------------------------
10347忙碌又贪心的泥瓦匠(搜索;采用递归的回溯)
#include<iostream>
#include<malloc.h>
usingnamespacestd;
//剪支
template<classType>
classLoading{
friendTypeMaxLoading(Type[],int*,int*,int*,int);
private:
voidBacktrack(inti);
intn,*x,*s,*e;
Type*v,sum,bestsum;
};
template<classType>
voidLoading<Type>::Backtrack(inti)
{
intj,flag=0;
if(i>n)
return;
if(1){
for(j=i;j>=1;j--)
if(x[j]==1)
{ flag=1;
if(s[i]>=e[j])
{x[i]=1;break;}
elsebreak;
}
if(flag==0)x[i]=1;
if(x[i]==1)
sum+=(e[i]-s[i])*v[i];
if(sum>bestsum)
bestsum=sum;
if(x[i]==1)//剪支啊
Backtrack(i+1);
if(x[i]==1)
sum-=(e[i]-s[i])*v[i];
x[i]=0;
}
Backtrack(i+1);
}
template<classType>
TypeMaxLoading(Typev[],int*s,int*e,int*x,intn)
{
Loading<Type>X;
X.v=v;
X.x=x;
X.s=s;
X.e=e;
X.sum=0;
X.bestsum=0;
X.n=n;
X.Backtrack(1);
returnX.bestsum;
}
intmain()
{
intn,i,j,temp,Bsum;
int*v,*e,*s,*x;
do{cin>>n;}while(n>1000||n<0);
s=(int*)malloc((n+1)*sizeof(int));
e=(int*)malloc((n+1)*sizeof(int));
v=(int*)malloc((n+1)*sizeof(int));
x=(int*)malloc((n+1)*sizeof(int));
for(i=1;i<=n;i++)
{cin>>s[i];
x[i]=0;}
for(i=1;i<=n;i++)
do{cin>>e[i];
e[i]+=s[i];
}while(e[i]>1000);
for(i=1;i<=n;i++)
cin>>v[i];
for(i=2;i<=n;i++)
{
for(j=1;j<=i;j++)
if(s[i]<s[j])
{
temp=s[j];s[j]=s[i];s[i]=temp;
temp=e[j];e[j]=e[i];e[i]=temp;
temp=v[j];v[j]=v[i];v[i]=temp;
}
}
Bsum=MaxLoading(v,s,e,x,n);
cout<<Bsum<<endl;
return0;
}
//用VC才能过
分享到:
相关推荐
这是一个关于日程安排和最大收益优化的问题,我们称之为"10347忙碌又贪心的泥瓦匠"。Kemo是村里的唯一一个泥瓦匠,他需要根据雇主们的预约来安排工作,以获得最大的收入。问题的关键在于如何在满足条件的情况下,...
忙碌独立董事 计算说明 变量符号 变量名称 变量定义 BUSY1 独立董事 是否“忙碌” 独立董事在3家以上公司任职取值为1,反之取0 BUSY2 “忙碌” 独董数量 公司“忙碌”独董人数 BUSY3 “忙碌”独董比例 公司“忙碌”...
在Windows Presentation Foundation(WPF)中,等待忙碌控件是一种用于向用户指示应用程序正在进行后台处理或加载数据的视觉元素。这类控件通常显示为旋转的圆圈、沙漏或其他动态图形,以提示用户程序正在执行一项...
当应用程序正在进行耗时操作,如数据加载或后台处理时,为了提供良好的用户体验,通常会显示一个“忙碌状态”或者“加载中”界面,以免用户误以为程序卡死。本示例“忙碌状态旋转加载界面”就是为了解决这一问题,它...
5G是第五代移动通信技术的简称,代表了当下最前沿的无线...以上知识点是《给忙碌者的5G基础知识课》这一文件中的主要内容概述,通过这些内容,可以系统性地了解5G技术的基础概念、关键技术、应用场景以及行业发展趋势。
我们发现,超过三分之一的董事在印度忙碌,其中约四分之三担任最多5名董事。 对于所有公司,我们发现董事会繁忙度与公司绩效之间存在弱的正相关关系,而对于非金融公司而言,董事会繁忙度与公司绩效之间的关系几乎...
大班美术公开课教案《忙碌的蚂蚁》润新教育.txt
【最新2022】忙碌独立董事 / 忙碌独董 2001-2022年,共 54,840 条观测值。 国 安,未剔除未缩尾,有辅助变量能够帮你剔除。 参考江新峰等(2020)在《会计研究》的做法, 在3家以上公司任职的独立董事定义为 “忙碌”...
然而,在这样一种全民忙碌的大环境下,一位初中语文教师通过自身经历,提出了一个值得我们深思的问题——“人生苦短,请勿忙碌”。 文章伊始,作者以轻松的笔触描述了他摆脱忙碌生活束缚的过程。他分享了自己的日常...
【程序忙碌时的进度条】是指在应用程序执行耗时任务时,为了提供用户反馈和提升用户体验,使用一种可视化元素——进度条,来显示程序正在处理的过程。在QT框架下,可以利用QProgressDialog或者QProgressBar控件来...
相反,由于忙碌,服务品质反而在下降。尼尔·伯恩斯提出的时间价值原理揭示了一个悖论:人们希望尽快完成任务,除非它能带来高回报。这表明在忙碌的驱使下,服务品质下降是不可避免的。 尽管科技进步在制造业中大幅...
因此,文章中提出使用纯CSS制作忙碌光标,替代传统的GIF图片,以应对不同屏幕尺寸的挑战。 纯CSS打造忙碌光标主要是利用CSS3中的动画和变换特性来实现。它依赖于CSS的`@keyframes`规则来定义动画的关键帧,通过`...
报告标题:“三十而已”女性洞察报告:婚恋、职场、育儿状态观察,致忙碌又灿烂的“三十” 报告概述: 这份报告聚焦于当代中国女性在30岁这一关键年龄节点的生活状态,涵盖婚恋、职场和育儿三个核心领域。30岁是...
我紧张而又忙碌的班主任远程培训学习悄悄地接近尾声.doc
新能源车辆维修保养基地的忙碌春节 本文主要介绍了天津新能源车辆维修保养基地在大年初四的忙碌景象。文章通过介绍基地的维修保养工作、车辆维修保养流程、维修技师的工作经历和基地的发展历程,展示了新能源车辆...
本教案主要针对小学三年级语文下册的口语交际课程,主题为“清晨,谁在为我们忙碌”。课程设计旨在通过生动的教学活动,提升学生的口语表达能力,培养他们对他人辛勤付出的感激之情,同时体验和理解生活的美好。 **...
有关喜欢忙碌的说说.doc
超级秀场,忙碌的磊编