P1800 software_NOI导刊2010提高(06)
P1800 software_NOI导刊2010提高(06)
题目描述
一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,每个技术人员在同一时刻只能做一个模块,一个模块只能由一个人独立完成而不能由多人协同完成。一个技术人员在整个开发期内完成一个模块以后可以接着做任一软件的任一模块。写一个程序,求出公司最早能在什么时候交付软件。
我感觉oi中就就这么几种题目:
1.寻找答案题
2.带入答案检验题
3.数据结构题
4.完成某种目的的题
二分答案+dp检验
如果你感觉寻找答案不会的话。可以考虑二分答案
dp用的是背包
\(f[i]\)表示在干m天(m由二分得来)时干了i个第一个软件的模块时,干了多少个二软件的模块
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using std::max;
const int maxn=110;
int n,m;
int f[2][maxn];//填表法
int m1[maxn],m2[maxn];
bool check(int val)
{
	memset(f,0,sizeof(f));/每次清空
	f[0][0]=1;//初始化,为了不引起和无法到达的情况混淆的麻烦,都先加1.
	for(int i=1;i<=n;i++)
		for(int j=0;j<=m;j++)
		{
			f[i&1][j]=0;
			for(int k=0;k<=j&&val-k*m1[i]>=0;k++)//完全背包,不过不能用优化
				if(f[(i&1)^1][j-k])
					f[i&1][j]=max(f[i&1][j],f[(i&1)^1][j-k]+(val-k*m1[i])/m2[i]);
		}
	if(f[n&1][m]-1>=m)	return true;//这里要减1
	return false;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&m1[i],&m2[i]);
	int l=1,r=20000;
	while(l<r)
	{
		int mid=(l+r)>>1;
		if(check(mid))
			r=mid;
		else
			l=mid+1;
	}
	printf("%d",l);
}
P1800 software_NOI导刊2010提高(06)的更多相关文章
- P1800 software_NOI导刊2010提高(06)(二分答案)
		P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ... 
- 洛谷P1800 software_NOI导刊2010提高(06)
		P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ... 
- 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)
		P1800 software_NOI导刊2010提高(06) 标签 二分答案 难度 普及/提高- 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每 ... 
- [luogu]P1800 software_NOI导刊2010提高(06)[DP][二分答案]
		[luogu]P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块, ... 
- 洛谷 P1800 software_NOI导刊2010提高(06)
		题目链接 题解 二分答案+dp 如果我们知道答案,贪心地想,让每个人做尽量多的模块一定不会比最优解差 \(f[i][j]\)表示前\(i\)个人第一个模块做了\(j\)块,第二个模块最多能做多少 然后 ... 
- P1799 数列_NOI导刊2010提高(06)
		P1799 数列_NOI导刊2010提高(06)f[i][j]表示前i个数删去j个数得到的最大价值.if(i-j==x) f[i][j]=max(f[i][j],f[i-1][j]+1); else ... 
- P1801 黑匣子_NOI导刊2010提高(06)
		P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ... 
- Luogu P1801 黑匣子_NOI导刊2010提高(06)
		P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ... 
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06)(未完)
		P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ... 
随机推荐
- TOJ 4289 Unrequited Love
			Description There are n single boys and m single girls. Each of them may love none, one or several o ... 
- JVM 类加载全过程
			类加载机制 - JVM把class文件加载到内存中 并对数据进行 校验,解析,初始化,最终形成JVM可以直接使用的java类型的过程 详细过程 加载→ 验证→ 准备→ 解析 → 初始化→ 使用 → ... 
- 【SoapUI】http接口测试
			一.接口介绍 API(Application Programming Interface,应用程序编程接口) 1.硬件接口 USB接口 硬盘接口 SD卡接口 LAN口和WAN口 CONSOLE口 .. ... 
- sql server数据库打不开
- win+R下的命令
			1.inetmgr 打开IIS 2.taskmgr 打开任务管理器 3.calc 打开计算器 4.msconfig 系统启动配置 5.mstsc 远程桌面 6.systeminfo 查看电脑信息 7 ... 
- 2017年11月3日  VS三大类&数组&VS的冒泡排序&集合&泛型集合
			三大类 共分为两个大类: 基本数据型&引用类型 基本数据型---值类型---整型---常用的整型: Int , 长整型: Long, 小整型: byle, 中整型 short --浮点型 - ... 
- js之闭包
			函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个对Array的求和.通常情况下,求和的函数是这样定义的: function sum(arr) { ret ... 
- python 爬虫初试
			python3.5 抓网易新闻的排行榜上的新闻,主要用自带的request模块和lxml import re from urllib import request from lxml import ... 
- with和catch改变作用域链
			总结笔记: with和catch会将对象中标识符的解析添加到作用域链的最前端, 标识符的解析就是with()和catch()括号中的对象. var x = 10, y = 10; with ({x: ... 
- PHP环境配置解释
			PHP中注释:#,//,/* */ 一.修改Apache配置 DocumentRoot "G:\PHP" //修改完需要重启Apache //以下二选一 ----- ... 
