P1180 - 矿工配餐 From Admin Normal (OI) 总时限:16s 内存限制:128MB 代码长度限制:64KB | |
这题看着就是不可解的。 但是仔细观察会发现它的情况较少,分支巨多(2^N)?? 于是我们用滚动数组+Dp显然可以用F[i][j][k][l][m]表示子结构 j,k,l,m为2个矿工最近2次的伙食(0表示没有) 任何坑爹的题目先想想能不能Dp…… 记忆化搜索不能滚动还会爆栈,于是Dp的存在性证毕。 #include<cstdio> |
描述 Description 现有两个煤矿,每个煤矿都雇用一组矿工。采煤工作很辛苦,所以矿工们需要良好饮食。每当一辆食品车到达煤矿时,矿工们便会产出一定数量的煤。有三种类型的食品车:肉车,鱼车和面包车。 |
输入格式 InputFormat 输入的第一行包含一个整数N (1 ≤ N ≤ 100 000), 表示食品车的数目。 |
输出格式 OutputFormat输出一个整数,表示最大的总产煤量。 |
样例输入 SampleInput [复制数据]样例输入16MBMFFB样例输入216MMBMBBBBMMMMMBMB |
样例输出 SampleOutput [复制数据]样例输出112样例输入229 |
数据范围和注释 Hint在样例1中,可以按照如下的顺序运送食品车:煤矿 1, 煤矿 1, 煤矿 2, 煤矿 2, 煤矿 1, 煤矿 2, 依次产生的产煤量为1, 2, 1, 2, 3 和 3 个单位,一共是12 个单位。还有其它运送方式也能产生上述最大总和的产煤量。 |
时间限制 TimeLimitation 前10点时限1s,分值8分 |