[vijos1246]文科生的悲哀(二)

试题描述

化学不及格的Matrix67无奈选择了文科。他必须硬着头皮艰难地进行着文科的学习。

这学期的政治、历史和地理课本各有n章。每一科的教学必须按章节从前往后依次进行。若干章政治、若干章历史和若干章的地理内容可以合成一个教学阶段。年级计划将整个学期的内容分成若干个阶段进行教学。为了保证各科教学进度相同,年级规定每一个阶段包含的各科的章节数必须相同。一个阶段包含的章节越多,这个阶段所需要的课时也就越多。经过研究,假如某个阶段包含政史地各k章,则政治学习需要花费3^k天的课时,历史学习需要花费5^k天的课时,地理学习需要花费2^k天的课时,最后还需要4天的综合训练。一个阶段所花费的总时间是以上四项时间的和。

为了便于安排时间,学校希望每个阶段恰好需要若干周来完成。因此,划分出的每一个阶段所需要的天数都必须是7的整数倍(高三是没有星期六和星期天的)。

那么,这学期的课程最多可以划分成多少个阶段呢?你会想到,要想划分的阶段数最多,一个阶段完成一章的任务就行了(因为3^1+5^1+2^1+4=14是7的整数倍)。但问题没有这么简单。每个课本都可能有一些独立性较强的连续章节,它们具有很强的连续性,必须在一个阶段中完成。如果你已知所有不能划分在两个或两个以上的阶段中的连续章节,你还能计算出最多能安排多少个阶段吗?

输入

第一行有两个用空格隔开的正整数n和m,分别表示各科课本的章节数和不可分割的连续章节的个数。

第二行到第m+1行,每行告诉了一个信息,该信息说明了哪一个课本的第几章到第几章必须一次性完成。同一科目给定的章节有可能重复或有重叠。

每一行信息分为两个部分。第一部分是“Politics:”、“History:”、“Geography:”三个字符串中的一个;第二部分是用“-”连接的两个数字x,y(1<=x<y<=n),表示该行第一部分所示的课本从第x章到第y章具有连续性。第二部分紧接在第一部分后面,没有任何符号分隔。

对于30%的数据,n,m<=10;
对于50%的数据,n,m<=1000;
对于100%的数据,n,m<=100 000。

输出

一个正整数,表示按照学校和年级的种种要求(见下)最多可以安排的阶段个数。

如果没有符合条件的安排方案,请输出-1。

注意:以下三个要求需要同时考虑。

1\.每一个阶段包含的各科章数相同;
2\.按时间函数计算出的各阶段所需天数必须是7的倍数;
3\.给出的任一个连续章节都不能被分割开来。

输入示例

8 3
Politics:1-2
History:5-6
Politics:1-4

输出示例

3

数据规模及约定

见“输入

题解

首先打个表发现 (2k + 3k + 5k + 4) mod 7 是有循环节的,循环节长度为 6,并且在 0,1 和 2 的时候等于 0。

根据题意,三个科目可以压成一个科目,我们维护每一个被捆在一块的章节的大小,然后 dp 即可。令 f(i, j) 表示考虑前 i 块,最后一个阶段中所有块的大小总和 mod 6 = j 时最多分成的阶段个数,转移显然。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;

int read() {
	int x = 0, f = 1; char c = getchar();
	while(!isdigit(c)){ if(c == ‘-‘) f = -1; c = getchar(); }
	while(isdigit(c)){ x = x * 10 + c - ‘0‘; c = getchar(); }
	return x * f;
}

#define maxn 100010

int f[maxn][10], val[maxn], A[maxn], cnt;

void up(int& a, int b) {
	a = max(a, b);
	return ;
}

int main() {
	int n = read(), m = read();
	while(m--) {
		int l = read(), r = read();
		val[l]++; val[r]--;
	}

	int tag = 0; cnt = 1;
	for(int i = 1; i <= n; i++) {
		tag += val[i];
		A[cnt]++;
		if(!tag) cnt++;
	}
	cnt--;
	memset(f, -1, sizeof(f));
	f[0][0] = 0;
	for(int i = 0; i < cnt; i++)
		for(int j = 0; j < 6; j++) if(f[i][j] >= 0) {
			up(f[i+1][(j+A[i+1])%6], f[i][j]);
			if(j < 3) up(f[i+1][A[i+1]%6], f[i][j] + 1);
		}

	int ans = -1;
	for(int i = 0; i < 3; i++) up(ans, f[cnt][i]);
	printf("%d\n", ans);

	return 0;
}
时间: 2024-10-27 18:10:49

[vijos1246]文科生的悲哀(二)的相关文章

[vijos1246]文科生的悲哀(二) 动态规划

背景 化学不及格的Matrix67无奈选择了文科.他必须硬着头皮艰难地进行着文科的学习. 描述 这学期的政治.历史和地理课本各有n章.每一科的教学必须按章节从前往后依次进行.若干章政治.若干章历史和若干章的地理内容可以合成一个教学阶段.年级计划将整个学期的内容分成若干个阶段进行教学.为了保证各科教学进度相同,年级规定每一个阶段包含的各科的章节数必须相同.一个阶段包含的章节越多,这个阶段所需要的课时也就越多.经过研究,假如某个阶段包含政史地各k章,则政治学习需要花费3^k天的课时,历史学习需要花费

【斐波那契】vijos 1093 文科生的悲哀

背景 化学不及格的Matrix67无奈选择了文科.他必须硬着头皮准备一次又一次的文科考试. 描述 在这一学期一共有n次文科考试,考试科目有4种,分别为政治.历史.地理和综合.每 次考哪一科是不定的,因此在考试前Matrix67不知道应该去复习哪一科的功课.他希望能预测出下一次可能考的科目.于是,他收集到了以往的文科考试的 资料.从以往的考试中,他发现了这样几个规律: 1.如果这次考的是政治,那么下一次一定会考历史: 2.如果这次考的是综合,那么下一次一定会考地理: 3.如果这次考的是历史,那么下

常见算法和例题

第3章  算法与程序设计模块 3.1  算    法 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作. 常用的算法:列举了穷举搜索.递归.回溯.递推.模拟.分治.贪心.深度优先搜索.广度优先搜索等几种较为常用的算法,没有做过多的描述,一旦给出具体描述,容易使内容加深,产生严重学科取向的引导,符合教育部普通高中课程方案的特点,对于这些必需的方法和思想,关键不在于学生能不能,而在于教师是否想到,是否有过关注,引发学生对系统方法和思想的思考,重视建立编程思想,

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

动归熟手题单

考完期末之后第一天训练寻找感觉的练手题目. ·等差数列 ·马棚问题 ·免费午餐 ·守望者的逃离 ·文科生的悲哀 ·着色问题 ·乌龟棋 ·小胖的水果 ·教主的后花园 ·物流运输(莫名其妙的CE)

出身在二三线城市软件工作者的悲哀

去年在家过年,家里还是老模样,父母和亲戚朋友问得最多的是,外面工作怎么样,打算什么时候回来工作?第一个问题好回答,这第二个问题却一直困扰着我,如何能回去呢?为了能找到一些思路,过完年来,我特地加了几个类似的QQ群,还在网上找了些提出同样问题的论坛,发现很多和我类似的人都有这样的想法,大家都是在二三线城市读书.成长,从在二三线城市最底层的工作做起,不断学习.努力.任劳任怨直到真正步入正轨. 随着时间的积累,工作能力也不断的提高,工作上的事都能应付自如,但遗憾的是我们能力不断得到增长时,公司业务却没

小白文科生眼中的Linux系统

我是一个正统的文科生,基本上在win的基础上长大,最开始接触的是Windows98(95虽然知道,但那时候太小了)然后是me,2000,再到XP,然后是vista,再然后就是使用量最大的7,然后是8,8.1,10,...基本上每个版本都用(玩)过,对win也可以说是有了基础的了解,13年暑假的时候,Android迅速崛起,从那个时候,刚刚知道Linux.在然后就开始疯狂的搜索Linux 的资料,那时候刚刚高中毕业,网上的资料基本都看不懂,虽然看不懂但还是找的津津有味. 记得2013年最先开始了解

文科生细谈学习Linux系统的重要性

首先大概介绍下自己,我学的是公共事业管理方面的专业,可以说是面向纯理论,社区管理社会管理的专业,但是从大二开始,对网络及服务器运维方面产生浓厚兴趣,并不断在网上找相关资料. 在这期间经历过很多,单说桌面环境从Ubuntu到Arch到传闻中以美化著称的elementary OS再到Centos和Debian,对了,还有当时和现在反响都不错的deepinlinux.这些当时都是本着好奇的心理,在不断地折腾,因为刚刚从win平台中折腾过来,比较顺眼KDE,Gnome,和MATE这样的桌面环境(毕竟是小

杨森翔:春节文化大观上编 第三章 春节古诗词 目录 第一节:春节诗词概述 一、 除夕诗词概述 二、元日诗词概述 三、 元宵诗词概述 第二节:春节古诗词拾萃

杨森翔:春节文化大观上编 第三章 春节古诗词 目录 第一节:春节诗词概述 一. 除夕诗词概述 二.元日诗词概述 三. 元宵诗词概述 第二节:春节古诗词拾萃 一.腊祭诗词 二.祭灶诗词 三.除夕诗词 四.元旦诗词 五.人日诗词 六.元宵诗词 第一节:春节古诗词概述 中国的春节,作为除旧迎新的节日,时间相当长,从年前的腊月二十三,天空中就似乎弥漫了节日的气息.这种节日的气氛,在保持传统风俗较好的地方,甚至会持续到二月二龙抬头的时候,但欢度春节的高潮,应该说是自除夕始一直到上元之夜.因此,历代歌咏和反