BZOJ 1806 IOI2007 Miners 矿工配餐 动态规划

BZOJ 1806 IOI2007 Miners 矿工配餐 动态规划

大家好,又见面了,我是全栈君。

题目大意:将一个123序列拆分为两个子序列。定义每一个数的贡献值为以这个数结尾的长度最大为3的子串中不同数的数量,求贡献值和的最大值

令f[i][a1][a2][b1][b2]为前i个数分成两组,第一组以a1 a2结尾,第二组以b1 b2结尾的最大贡献值 转移啥的自己YY吧 记得开滚动数组

尼玛写错个參数都要调半天……

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,ans,f[2][4][4][4][4];
inline int Get_Char()
{
	char c;
	do c=getchar(); while(c!='M'&&c!='F'&&c!='B');
	switch(c)
	{
		case 'M':return 1;
		case 'F':return 2;
		case 'B':return 3;
	}
}
inline int Score(int x,int y)
{
	if(x==0) return 1;
	return x==y?1:2;
}
inline int Score(int x,int y,int z)
{
	int temp=x*y*z;
	switch(temp)
	{
		case 6:return 3;
		case 1:
		case 8:
		case 27:return 1;
		case 0:return Score(y,z);
		default: return 2;
	}
}
int main()
{
	int i,a1,a2,b1,b2;
	cin>>n;
	memset(f,0xef,sizeof f);
	f[0][0][0][0][0]=0;
	for(i=1;i<=n;i++)
	{
		int temp=Get_Char();
		memset(f+(i&1),0xef,sizeof(f)>>1);
		for(a1=0;a1<=3;a1++)
			for(a2=(a1?1:0);a2<=3;a2++)
				for(b1=0;b1<=3;b1++)
					for(b2=(b1?

1:0);b2<=3;b2++) if(f[~i&1][a1][a2][b1][b2]>=0) { f[i&1][a2][temp][b1][b2]=max(f[i&1][a2][temp][b1][b2] ,f[~i&1][a1][a2][b1][b2]+Score(a1,a2,temp)); f[i&1][a1][a2][b2][temp]=max(f[i&1][a1][a2][b2][temp] ,f[~i&1][a1][a2][b1][b2]+Score(b1,b2,temp)); } } for(a1=0;a1<=3;a1++) for(a2=(a1?1:0);a2<=3;a2++) for(b1=0;b1<=3;b1++) for(b2=(b1?1:0);b2<=3;b2++) ans=max(ans,f[n&1][a1][a2][b1][b2]); cout<<ans<<endl;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115577.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月2日 下午3:00
下一篇 2022年2月2日 下午3:00


相关推荐

  • P2192 HXY玩卡片

    P2192 HXY玩卡片

    2022年3月7日
    45
  • Java单元测试用例的编写

    Java单元测试用例的编写作者 阿里技术链接 https www zhihu com question answer 来源 知乎著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 编写 Java 单元测试用例 其实就是把 复杂的问题要简单化 即把一段复杂的代码拆解成一系列简单的单元测试用例 写好 Java 单元测试用例 其实就是把 简单的问题要深入化 即学习一套方法 总结一套模式并应用到实践中 这里 作者根据日常的工作经验 总结了一些 Java 单元测试技巧 以供

    2026年3月19日
    2
  • javascript几种写空格符的方法

    javascript几种写空格符的方法javascript 几种写空格符的方法

    2026年3月20日
    2
  • Ping test

    Ping test

    2021年8月8日
    82
  • ivx动效按钮 基础按钮制作 01

    ivx动效按钮 基础按钮制作 01一 准备工作首先创建一个相对定位应用 接着创建一个页面 随后我们切换一下屏幕 更改为 PC 端 web 因为手机移动端一般是没有鼠标悬浮事件的 为了使按钮显示方便观察 我们设置水平和垂直对其为居中 二 按钮制作 1 1 利用容器制作按钮由于我们按钮的悬浮动效使用按钮本身直接设置并不好实现过多的效果 在此使用一个容器来编写按钮特效 创建一个行 设置宽高分别为 150 50 我们将该容器作为按钮 那么再设置对应的背景色 设置完毕后我们需要给予这个按钮一个点击后类似于按钮点击的效果

    2026年3月18日
    2
  • 拟物化设计麦当劳撕券交互,拟物隐喻如何增强用户确认感?

    拟物化设计麦当劳撕券交互,拟物隐喻如何增强用户确认感?

    2026年3月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号