首页 > 其他分享 >ybt1677软件开发

ybt1677软件开发

时间:2025-01-03 14:45:34浏览次数:1  
标签:ybt1677 软件开发 int 18 mid 模块 技术人员 软件

1677:软件开发

时间限制: 1000 ms 内存限制: 131072 KB

【题目描述】

一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成\(m\)个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,每个技术人员在同一时刻只能做一个模块,一个模块只能由一个人独立完成而不能由多人协同完成。一个技术人员在整个开发期内完成一个模块以后可以接着做任一软件的任一模块。写一个程序,求出公司最早能在什么时候交付软件。

【输入】

输入文件第一行包含两个由空格隔开的整数\(n\)和\(m\)。

接下来的\(n\)行每行包含两个用空格隔开的整数\(d_1\)和\(d_2\),\(d_1\)表示该技术人员完成第一个软件中的一个模块所需的天数,\(d_2\)表示该技术人员完成第二个软件中的一个模块所需的天数。

【输出】

输出文件仅有一行包含一个整数\(d\),表示公司最早能于\(d\)天后交付软件。

【输入样例】

3 20
1 1
2 4
1 6

【输出样例】

18

【数据规模】

对于100%的数据,\(1≤n≤100,1≤m≤100,1≤d_1,d_2≤100\)。

【样例说明】

最快的方案是第一个技术人员完成第二个软件的18个模块,用时18天,第三个技术人员完成第一个软件的18个模块,用时18天,其余的模块由第二个技术人员完成,用时12天,做完所有的模块需要18天。如果第一个技术人员完成第二个软件的17个模块,第三个技术人员完成第一个软件的17个模块,其余的模块由第二个技术人员完成,需要用时18天,做完所有模块仍然需要18天,所以少于18天不可能做完所有模块。


题目最先想到的就是DP。但是f[i][x][y]前i个人最早几天能完成x个软件1的模块和软件2的y个模块。
很明显超时。
然后把f去掉一维,f[i][x]表示前i个人在完成x个程序1的模块的情况下最多能完成多少个第二个程序的模块,当然时间要二分一下,从而去判断。f[i][x]=max(f[i-1][y]+(mid-fir[i]*(x-y))/sec[i])
很长时间不写DP了,需要注意边界!!!


#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int f[maxn][maxn];
int n,m;
int fir[maxn],sec[maxn];
int ans;
bool pd(int mid)
{
	memset(f,-0x7f,sizeof f);
	f[0][0]=0;
	for(int i=1;i<=n;++i)f[i][0]=f[i-1][0]+mid/sec[i];
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
		{
			for(int k=j;k>=0;--k)
				if(mid>=(j-k)*fir[i])
				{
					
					f[i][j]=max(f[i][j],f[i-1][k]+(mid-(j-k)*fir[i])/sec[i]);
				}
		}
	}
	return f[n][m]>=m;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)scanf("%d%d",&fir[i],&sec[i]);
	int l=0,r=10000;
	while(l<=r)
	{
		int mid=(l+r)>>1;
		if(pd(mid))ans=mid,r=mid-1;
		else l=mid+1;
	}
	cout<<ans<<endl;
	return 0;
}

标签:ybt1677,软件开发,int,18,mid,模块,技术人员,软件
From: https://www.cnblogs.com/gryzy/p/18650091

相关文章

  • 软件工程课程项目“物品复活“软件开发最终版本
    软件工程项目总结:基于JSON的物品管理与用户审批系统摘要:本项目通过使用Python、PyQt5等技术栈,开发了一个基于JSON文件进行数据持久化的物品管理与用户审批系统。系统包含了用户注册与登录、管理员审批、物品添加与删除、物品查看以及物品分类管理的完整功能。本文将从软件工......
  • “物品复活”软件开发总结
      在学习和开发“物品复活”软件的过程中,我深刻体会到了软件工程在整个软件开发生命周期中的重要性。这门课程为我提供了一个全面的视角,让我从一个程序员的思维转变为一个软件工程师的视角。从编程到软件工程  最初接触C++编程时,我对软件工程充满了好奇,认为它是那些经验丰......
  • “物品复活”软件开发总结
    前言经过一个学期的学习,我对软件开发的整体过程有了一定了解,再看看自己的开发过程,跟工程上严密的步骤相去甚远,简直不堪回首。下面从软件生命周期的各个阶段对开发过程进行反思总结。软件定义软件定义时期的任务是:确定软件工程开发必须完成的总目标、确定工程的可行性、导出实......
  • “物品复活”软件开发总结与体会
    1.项目背景与功能概述在《软件工程》课程中,我完成了一个基于PyQt5的物品管理系统开发。该系统的主要功能包括普通用户和管理员的注册和登录,对于管理员提供审核用户和类别管理两个模块,对普通用户实现物品的添加、删除、查找、显示全部物品的功能。系统实现了对物品信息(如名称、类......
  • 软件开发、硬件开发与设计领域各类工具及平台
    一、软件开发相关Web开发框架像Django(Python)、SpringBoot(Java)这样的框架可以提供基础的项目结构、路由、数据库连接等功能的demo,展示如何快速搭建一个功能完备的网站。例如,一个使用Django搭建的简单博客系统demo,包含文章发布、分类、评论等功能,能让开发者了解其MVT(模型-视......
  • Week 15:“物品复活”软件开发总结
    软件工程课程总结:基于Tkinter的物品管理系统开发体会1.项目背景与功能概述在《软件工程》课程的学习中,我完成了一个基于Tkinter的物品管理系统的开发。该程序的主要功能包括物品的添加、编辑、删除、恢复,以及搜索管理等操作,同时提供了回收站功能以便用户可以管理已删除的物品。......
  • “物品复活”软件开发(Final) 总结文章
    在开发物品复活系统过程中,我深刻体会到软件工程中的一些关键概念和技术方法的应用。以下将从多个维度,结合软件工程的理论,回顾开发过程中的经验与收获。需求分析与功能设计在开发开始时,需求分析是整个软件工程过程中至关重要的一步。在这一步,我明确了系统的主要目标,即为用户提供......
  • 软件开发之 “雷区”:20 个常见错误深度剖析
    需求理解不充分问题描述:没有与利益相关者进行充分沟通,对软件的功能、性能、用户场景等需求理解模糊。案例:开发一个企业资源规划(ERP)系统时,没有理解企业复杂的业务流程,导致开发出的模块无法满足实际工作流程,如库存管理模块没有考虑到不同仓库之间货物调配的特殊规则。忽视......
  • 人工智能的软件开发工具
    Python基础Python是一种广泛使用的高级编程语言,由于其简洁的语法和强大的功能,得到了广泛的欢迎,尤其是在数据分析、机器学习、Web开发、自动化脚本等领域。本文将全面介绍Python的基础知识,帮助初学者建立扎实的编程基础。1.Python概述Python由荷兰人吉多·范罗苏姆于1991......
  • “物品复活”软件开发体会
    这次的代码编写对于我来说真可谓是前所未有的挑战。首先,在此之前之前其实从未真正接触过面向对象的编程。在这次软件编写的过程中,我才深刻体验到了类的使用对于模块化封装带来的便利。同时,我还体会到了面对对象这个概念对于软件编写的思维过程的重要性。有了抽象出的对象,在构建思......