备战蓝桥杯---DP刷题3

news2025/2/25 18:21:09

1.博弈+区间DP:

当游戏轮到A时 ,它可以选左右两点,而他的目标就是让A-B最大,此时因为对手也是最优策略,因此我们要在最坏的情况下拓展,即应该选(L,R-1)(L+1,R)上的max,答案为其相反数+端点值,然后对于对手同理,下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n;
int w[N];
int f[N][N];
int main(){
    cin>>n;
    for(int i=0;i<n;i++) scanf("%d",&w[i]);
    for(int len=1;len<=n;len++){
        for(int i=0;i+len-1<n;i++){
            int j=i+len-1;
            f[i][j]=max(w[i]-f[i+1][j],w[j]-f[i][j-1]);
        }
    }
    int sum=0,d=f[0][n-1];
    for(int i=0;i<n;i++) sum+=w[i];
    cout<<(sum+d)/2<<" "<<(sum-d)/2;
}

2.状态压缩DP

首先,当我们把横的排完了,那么竖的方向的方法数也就唯一确定了,那么我们可以令f[i][j]表示已经将前i-1列摆好,并从i-1伸到第i列的状态为j的方案数,为了保证合法性,我们必须让列的剩余连续空格为偶数个,对于前一个状态j

1.j&k==0

2.所有连续空着的长度必须为偶数。

答案就是f[m][0],为了时间我们先预处理可行方案。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=12,M=(1<<N);
int n,m;
long long f[N][M];
vector<int> state[M];
bool st[M];//所有可能的列

int main(){
    while(cin>>n>>m,n||m){
        for(int i=0;i<(1<<n);i++){
            int cnt=0;
            bool ff=1;
            for(int j=0;j<n;j++){
                if(i>>j&1){
                    if(cnt&1){
                         ff=0;
                         break;
                    }
                    cnt=0;
                }
                else cnt++;
            }
            if(cnt&1) ff=0;
            st[i]=ff;
        }
        for(int i=0;i<(1<<n);i++){
            state[i].clear();
            for(int j=0;j<(1<<n);j++){
                if((i&j)==0&&st[i|j]) state[i].push_back(j);
                
            }
        }//预处理
        memset(f,0,sizeof(f));
        f[0][0]=1;
        for(int i=1;i<=m;i++){
            for(int j=0;j<(1<<n);j++){
                for(auto k:state[j]){
                    f[i][j]+=f[i-1][k];
                }
            }
        }
        cout<<f[m][0]<<endl;
    }
}

3.状压DP

跟炮兵阵地一样,下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=110,M=1<<6,K=21,mod=1e9+7;
int n,m,k;
int f[N][M][M][K];
int lowbit(int x){
	return x&-x;
}
int count(int x){
	int res=0;
	while(x){
		res++;
		x-=lowbit(x);
	}
	return res;
}
int main(){
	cin>>n>>m>>k;
	f[0][0][0][0]=1;
	for(int i=1;i<=m;i++){
		for(int a=0;a<1<<n;a++){
			for(int b=0;b<1<<n;b++){
				if (b & (a << 2) || a & (b << 2)) continue;
				for (int c = 0; c < 1 << n; c ++ ){
					if (c & (a << 2) || a & (c << 2)) continue;
                    if (c & (b << 1) || b & (c << 1)) continue;
                    int t = count(b);
                     for (int j = t; j <= k; j ++ ){
                     	f[i][a][b][j] =(f[i][a][b][j] + f[i - 1][c][a][j - t])%mod;
					 }
				}
			}
		}
	}
	int res = 0;
	for (int a = 0; a < 1 << n; a ++ )
        for (int b = 0; b < 1 << n; b ++ )
            res = (res + f[m][a][b][k])%mod;
    cout<<res;
}

4.区间DP:

就是石子合并的,我们用a[i]记录第i个珠子的头,令f[i][j]表示i--j合并成一个珠子释放的最大能量,易得:f[i][j]=max(f[i][j],f[i][k]+f[k+1][r]+a[k+1]*a[l]*a[r+1])

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[220],f[220][220],ans;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        a[i+n]=a[i];
    }
    for(int len=2;len<=n;len++){
        for(int i=1;i+len-1<2*n;i++){
            int j=i+len-1;
            for(int k=i;k<j;k++){
                f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]);
            }
        }
    }
    for(int i=1;i<=n;i++) ans=max(ans,f[i][i+n-1]);
    cout<<ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1585655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉 | 基于二值图像数字矩阵的距离变换算法

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本实验基于 OpenCV 实现了二值图像数字矩阵的距离变换算法。首先生成一个 480x480 的黑色背景图像&#xff08;定义黑色为0&#xff0c;白色为1&#xff09;&#xff0c;在其中随机选择了三个白色像素点作为距离变换的原点&…

微服务学习2

目录 一.网关路由 1.1.认识网关 1.2网关快速入门 1.2.1.创建项目 1.2.2.引入依赖 1.2.3.启动类 1.2.4.配置路由 1.3.路由过滤 二.网关登录校验 2.1网关请求处理流程 2.2网关过滤器 2.2.2网关过滤器 2.3自定义GlobalFilter 2.4.登录校验 2.4.1.JWT工具 2.4.2.登…

中文自然语言处理流程

这是博主自己根据网上资料进行整理的&#xff0c;希望对你有所帮助~

openlayer实现webgis端绘制制图及编辑

在WebGIS端制图是指通过Web浏览器界面实现地理信息数据的可视化、编辑、分析以及地图产品的制作。这一过程通常涉及以下几个关键环节&#xff1a; **1. 前端技术栈&#xff1a; •HTML/CSS/JavaScript&#xff1a;作为Web开发的基础&#xff0c;用于构建用户界面布局、样式设…

【线段树】2213. 由单个字符重复的最长子字符串

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…

Compose UI 之 Card 卡片组件

Card Card 是用于显示带有圆角和可选阴影的矩形内容容器。它通常用于构建用户界面,并可以包含标题、文本、图像、按钮等元素,表示界面上的可交互元素,我们称它是 “卡片”。 Card 使用的一些经典的场景: 列表数据,例如 新闻列表,产品列表等。信息提示框,使用 Card 组件…

Canon佳能打印机在扫描时会提示缺少组件解决方法

问题截图 解决方法 1.复制佳能驱动网址&#xff1a;下载与支持 – 服务与支持 - 佳能&#xff08;中国&#xff09;到浏览器访问&#xff0c;输入打印机型号&#xff0c;点击驱动程序。 2.在驱动程序栏目下&#xff0c;下载并安装打印机驱动。 3.点击应用程序栏目&#xff0c;…

计算机中的数字表示:正码、反码和补码

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 在计算机科学领域&#xff0c;数字表示是一个基础而且至关重要的概念。正码、反码和补码是计算机中常 目录 &am…

uniapp开发小程序,实现堆叠卡片轮播图

一、实现堆叠卡片轮播图: 需求: 实现堆叠轮播图效果堆叠到后面的图片有虚化效果可以在堆叠图片上写文字或叠加图片等效果可以手动滑动&#xff0c;也可以定时自动轮播 二、代码实现&#xff1a; 1.封装一个组件myswiper.vue <!-- 折叠轮播图 组件--> <template>…

Linux从入门到精通 --- 3.用户、权限

文章目录 第三章&#xff1a;3.1 root用户3.1.1 su3.1.2 exit3.1.3 sudo 3.2 用户和用户组3.2.1 用户组管理创建用户组删除用户组 3.2.2 用户管理创建用户删除用户查看用户所属组修改用户所属组 3.2.3 getent一&#xff1a;二&#xff1a; 3.3 查看权限控制信息3.3.1 认知权限信…

蓝桥杯算法题:栈(Stack)

这道题考的是递推动态规划&#xff0c;可能不是很难&#xff0c;不过这是自己第一次靠自己想出状态转移方程&#xff0c;所以纪念一下&#xff1a; 要做这些题目&#xff0c;首先要把题目中会出现什么状态给找出来&#xff0c;然后想想他们的状态可以通过什么操作转移&#xf…

DSP笔记8-通用GPIO

电源类 AD引脚类 系统相关JTAG 时钟 GPIO (general purpose input output)复用&#xff0c; 复用&#xff0c;I/O引脚&#xff0c;外设的功能引脚&#xff0c; 88个GPIO引脚&#xff0c;通用的输入输出口&#xff0c;功能复用的。 GPIO特点 输入电平与TTL电平兼容。>2.0V…

html 实现多个文本内容,轮播效果类似gif图片

前几日&#xff0c;产品要求后端实现一个将文字转为gif图片&#xff0c;要用于官网首页广告栏。我想这不是前段就能实现吗&#xff0c;怎么还要求后端生成gif&#xff0c;然后前段在展示。你确定招的前段不是对手公司过来的卧底&#xff1f;&#xff1f;&#xff1f; <!DOCT…

SSL中的CA证书

目录 一、CA概述 二、数据加密 三、身份认证 一、CA概述 SSL如何保证网络通信的安全和数据的完整性呢&#xff1f;就是采用了两种手段&#xff1a;身份认证和数据加密。身份认证就需要用到CA证书。 CA是证书的签发机构&#xff0c;它是公钥基础设施&#xff08;Public Key In…

neo4j-01

Neo4j是&#xff1a; 开源的&#xff08;社区版开源免费&#xff09;无模式&#xff08;不用预设数据的格式&#xff0c;数据更加灵活&#xff09;noSQL&#xff08;非关系型数据库&#xff0c;数据更易拓展&#xff09;图数据库&#xff08;使用图这种数据结构作为数据存储方…

腾讯云4核8G服务器多少钱?4核8G能干啥?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

USB主机驱动分析

对于usb控制器来讲&#xff0c;不管是dwc3,还是xhci,ehci,ohci这些接口标准&#xff1b;如果半导体厂商是用这些标准来实现的usb控制器&#xff1b;那他们基本上给可以用这些核的通用驱动&#xff0c;因为通用寄存器都是一致的。 在Linux内核中&#xff0c;用usb_hcd结构体描述…

C++初阶 | [十二] 模板进阶

摘要&#xff1a;非类型模板参数&#xff0c;类模板的特化&#xff0c;模板的分离编译&#xff0c;模板总结 前言&#xff1a;C初阶终篇 1. 非类型模板参数 类型模板参数&#xff1a;如下代码&#xff0c;T 为模板的类型参数。 #define N 10 template<class T> class …

如何理解单片机 pwm 控制的基本原理?

单片机PWM&#xff08;脉宽调制&#xff09;控制的基本原理&#xff0c;简而言之&#xff0c;就是通过改变脉冲信号的宽度&#xff08;占空比&#xff09;来控制模拟电路。这涉及到单片机生成一系列脉冲信号&#xff0c;每个脉冲信号的高电平持续时间和整个周期的比值&#xff…

4051A/B/C/D/E–S信号/频谱分析仪

4051A/B/C/D/E–S信号/频谱分析仪 频段26.5GHz 计数分辨率0.001Hz 同轴频率26.5GHz 4051-S系列信号/频谱分析仪可广泛应用于移动通信、汽车电子、物联网、半导体等领域的信号及设备测试。 PART.01 产品综述 —— 频率范围覆盖&#xff1a;9kHz~26.5GHz# 4051-S系列信号/频…