[bzoj1806][Ioi2007]Miners 矿工配餐 2014年7月10日1,7870 Description 现有两个煤矿,每个煤矿都雇用一组矿工.采煤工作很辛苦,所以矿工们需要良好饮食.每当一辆食品车到达煤矿时,矿工们便会产出一定数量的煤.有三种类型的食品车:肉车,鱼车和面包车. 矿工们喜欢变化的食谱.如果提供的食品能够不断变化,他们的产煤量将会增加.每当一个新的食品车到达煤矿时,矿工们就会比较这种新的食品和前两次(或者少于两次,如果前面运送食品的次数不足两次)的食品,并且: • 如…
dp... ------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<cctype> #include<iostream>   #define rep( i , n ) for( int i = 0 ;  i <…
题目描述 有n个物品,每个都是3种之一.现要将这n个物品分成两个序列,对于每个序列中的每个物品,可以得到 它及它前面相邻的两个物品(不足则取全部)中不同种类的个数 的收益.问最大的总收益. 输入 输入的第一行包含一个整数N (1 ≤ N ≤ 100 000), 表示食品车的数目. 第二行包含一个由N个字符组成的字符串,按照配送顺序依次表示食品车配送的食品的类型.每个字符是以下三个大写字母之一:'M' (表示肉类), 'F' (表示鱼类) 或 'B' (表示面包). 输出 输出一个整数,表示最大的…
相当于noip前两题难度的ioi题........ 还是挺好想的...算是状压一下?...两个二进制位可以表示三种食物或者没有,所以用四个二进制位表示某个煤矿最近两餐的情况... 先把各种情况加上各种食物后的产出与新情况预处理出来吧.(如果两餐开两维的话似乎不太好预处理) f[i][j][k]表示前i辆车,两个煤矿最近两餐情况分别为j和k时的最大产出.i那维滚动一下 感觉要注意的就是,两餐的情况是有非法情况的(前一餐吃了,后一餐不吃):还有就是有的情况可能用目前的食物凑不出来.. #includ…
[Ioi2007]Miners 矿工配餐 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 214  Solved: 128 Description 现有两个煤矿,每个煤矿都雇用一组矿工.采煤工作很辛苦,所以矿工们需要良好饮食.每当一辆食品车到达煤矿时,矿工们便会产出一定数量的煤.有三种类型的食品车:肉车,鱼车和面包车. 矿工们喜欢变化的食谱.如果提供的食品能够不断变化,他们的产煤量将会增加.每当一个新的食品车到达煤矿时,矿工们就会比较这种新的食品和前…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1806 [题意] 给定一个权在1..3内的序列,在保持相对位置不变的情况下拆分成两个序列,使获益最大. [思路] 设f[i][a][b][c][d]表示前i个数,分给A的倒数两个为ab,分给B的倒数两个为cd,则有转移式: f[i+1][b][x][c][d]<- f[i][a][b][c][d]+w(a,b,x) f[i+1][a][b][d][x]<- f[i][a][b][c]…
ime Limit: 10 Sec  Memory Limit: 64 MBSubmit: 910  Solved: 559[Submit][Status][Discuss] Description 现有两个煤矿,每个煤矿都雇用一组矿工.采煤工作很辛苦,所以矿工们需要良好饮食.每当一辆食品车到达煤矿时,矿工们便会产出一定数量的煤.有三种类型的食品车:肉车,鱼车和面包车. 矿工们喜欢变化的食谱.如果提供的食品能够不断变化,他们的产煤量将会增加.每当一个新的食品车到达煤矿时,矿工们就会比较这种新的食…
link 其实就是一个比较简单的$IOI$题.简单$dp$就行,设$5$维$dp$即可 最后在滚动一下,判一下可行性即可. #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; inline int read(){ ,ans=;char c=getchar(); ;c=getchar();} +c-';c=getchar()…
题意简述 有两个矿洞,已知食物的种类(≤3)和顺序,将他们送往任一矿洞, 若一个矿洞3次食物相同,贡献1:若有2种不同食物,贡献2:若有3种不同食物,贡献3 求最大贡献 题解思路 food[i] 为当前食物 dp[i][i1][i2][i3][i4]表示当前是第i个食物,第一个矿洞前两次食物为i1, i2,第二个矿洞前两次食物为i3, i4 dp[i][i2][food[i]][i3][i4] = (dp[i - 1][i1][i2][i3][i4] + (i1, i2, food[i]) 的贡…
题目大意:将一个123序列拆分为两个子序列.定义每一个数的贡献值为以这个数结尾的长度最大为3的子串中不同数的数量,求贡献值和的最大值 令f[i][a1][a2][b1][b2]为前i个数分成两组,第一组以a1 a2结尾,第二组以b1 b2结尾的最大贡献值 转移啥的自己YY吧 记得开滚动数组 尼玛写错个參数都要调半天-- #include<cstdio> #include<cstring> #include<iostream> #include<algorithm&…