状态压缩DP题单

P1433 吃奶酪(最短路)

dp(i, s) 表示从 i 出发经过的点的记录为 s 的路线距离最小值

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 20;
signed main()
{	
	int n; cin >> n;
	vector<double>x(n + 1), y(n + 1);
	vector<vector<double>> dp(n + 1, vector<double>(1 << (n + 1), 2e9));
	x[0] = 0, y[0] = 0;

	auto dis = [&](int i, int j) -> double
	{
		return sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
	};
	for(int i = 1; i <= n; i ++)
	{
		cin >> x[i] >> y[i];
//		dp[i][1 << (i - 1)] = 0;
	}
	dp[0][1] = 0;
	for(int s = 1; s < (1 << (n + 1)); s ++)
	{
		for(int i = 0; i <= n; i ++)
		{
			if((s & (1 << (i))) == 0) continue;
			for(int j = 0; j <= n; j ++)
			{
				if(i == j) continue;
				if((s & (1 << (j))) == 0) {continue;}
//				cout << s << " " << i << " " << j << '\n';
				dp[i][s] = min(dp[i][s], dp[j][s - (1 << (i))] + dis(i, j)); 
			}
		}
	}
    double ans = -1;
    for(int i = 1; i <= n; i ++)
    {
        double s = dp[i][(1 << (n + 1)) -1];
        if(ans==-1||ans>s) ans=s;
    }
	cout << fixed << setprecision(2) << ans << '\n';
}

 

P8733 [蓝桥杯 2020 国 C] 补给(floyd)

 dp(i, s) 表示到达 i ,经过的点的记录为 s 的路线距离最小值

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 20;
signed main()
{	
	int n, D; cin >> n >> D;
	vector<double>x(n + 1), y(n + 1);
	vector<vector<double>> dp(n + 1, vector<double>((1 << n) + 10, 2e9)), f(n + 1, vector<double>(n + 1, 2e9));
	auto dis = [&](int i, int j) -> double
	{
		return sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
	};
	for(int i = 0; i < n; i ++) cin >> x[i] >> y[i];
	
	for(int i = 0; i < n; i ++)
		for(int j = 0; j < n; j ++)
		{
			double now = dis(i, j);
			if(now <= D) f[i][j] = now;
		}
	
	for(int k = 0; k < n; k ++)
		for(int i = 0; i < n; i ++)
			for(int j = 0; j < n; j ++)
				f[i][j] = min(f[i][k] + f[k][j], f[i][j]);

	dp[0][1] = 0;
	for(int s = 1; s < (1 << n); s ++)
	{
		for(int i = 0; i < n; i ++)
		{
			if((s & (1 << i)) == 0) continue;
			for(int j = 0; j < n; j ++)
			{	
				if(i == j) continue;
				if((s & (1 << j)) == 0) continue;
				dp[i][s] = min(dp[i][s], dp[j][s - (1 << i)] + f[i][j]);
//				cout << i << " " << j << " " << f[i][j] << '\n';
			}
		}
	}
	double ans = 1e9;
	for(int i = 0; i < n; i ++)
	{
//		cout << i << " " << (1 << (n - 1)) << " " << dp[i][1 << (n - 1)] << '\n';
		double now = f[0][i] + dp[i][(1 << n) - 1];
		ans = min(ans, now);
	}
	cout << fixed << setprecision(2) << ans << '\n';
}

P7859 [COCI2015-2016#2] GEPPETTO(简单枚举状态)

 

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 4e5 + 10;
typedef long long ll;
int a[25][25]; 
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n, m; cin >> n >> m;
	for(int i = 1; i <= m; i ++)
	{
		int x, y; cin >> x >> y;
		a[x][y] = a[y][x] = 1;
	}
	int ans = 1;
	for(int s = 1; s < (1 << n); s ++)
	{
		int f = 0;
		for(int i = 1; i <= n; i ++)
		{
			if((s & (1 << (i - 1))) == 0) continue; 
			for(int j = i + 1; j <= n; j ++)
			{
				if((s & (1 << (j - 1))) == 0) continue;
				if(a[i][j] || a[j][i]) 
				{
					f = 1; 
//					cout << s << " " << i << " " << (s & (1 << (i - 1))) << " " << j << " "<< (s & (1 << (j - 1))) << '\n'; 
					break;
				}
			}
			if(f) break;
		}
//		cout << s << ' ' << f << '\n';
		if(!f) ans ++;
	}
	cout << ans << '\n';
}

P8687 [蓝桥杯 2019 省 A] 糖果

 

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 20;
/*
1 3 3
1 2 3
*/
signed main()
{	
	int n, m, k; cin >> n >> m >> k;
	vector<int>dp(1 << 21, -1), a(105);
	for(int i = 1; i <= n; i ++) 
	{
		int s = 0;
		for(int j = 1; j <= k; j ++)
		{
			int x; cin >> x;
			x --;
			s |= (1 << x);
		}
//		s |= (1 << x), s |= (1 << y), s |= (1 << z);
//		int s = (1 << x) + (1 << y) + (1 << z);
		a[i] = s;
	}
	dp[0] = 0;
	for(int s = 0; s < (1 << m); s ++)
	{
		if(dp[s] == -1) continue;
		for(int i = 1; i <= n; i ++)
		{
			if(dp[s | a[i]] == -1 || dp[s] + 1 < dp[s | a[i]])
			{
				dp[s | a[i]] = dp[s] + 1;
//				cout << s << " " << i << " " << a[i] << ' ' << dp[s | a[i]] << '\n';
			}
		}
	}
	cout << dp[(1 << m) - 1] << '\n';
}

[ABC332E] Lucky bag(SOS DP)

dp(s, i) 表示状态为 s 装入 i 个背包的最小值。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 25; 
signed main()
{	
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	int n, d; cin >> n >> d;
	vector<double>a(n + 1);
	vector<vector<double>>dp(1 << n, vector<double>(d + 1, 1e18));
	double sum = 0;
	for(int i = 0; i < n; i ++)
	{
		cin >> a[i];
//		cout << a[i] << ' ';
		sum += a[i];
	}
	double ave = sum / d;
//	cout << ave << '\n';
	for(int s = 0; s < (1 << n); s ++)
	{
		double res = 0;
		for(int j = 0; j < n; j ++) if((1 << j) & s) res += a[j];
		dp[s][1] = (res - ave) * (res - ave);
	}
	for(int i = 2; i <= d; i ++)
	{
		for(int s = 0; s < (1 << n); s ++)
		{
			for(int t = s; t > 0; t = (t - 1) & s)
			{
				dp[s][i] = min(dp[s][i], dp[t][i - 1] + dp[s ^ t][1]);
//				cout << s << " " << i << '\n';
			}
		}		
	}
	cout << fixed << setprecision(15) << dp[(1 << n) - 1][d] / d << '\n';
}

彩色路径(最短路/边数限制+折半存储)

CCF-CSP认证考试 202312-5 彩色路径 20/50/100分题解_ccf彩色路径-CSDN博客

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS之动态创建任务与删除任务

1.本文是利用FreeRTOS来动态创建任务和删除任务。主要是使用FreeRTOS的两个API函数&#xff1a;xTaskCreate()和vTaskDelete()。 任务1和任务2是让LED0、LED1闪烁。任务3是当按键按下时删除任务1。 使用动态创建任务时&#xff0c;需要动态的堆中申请任务所需的内存空间&…

OpenHarmony多媒体-ohos_videocompressor

介绍 videoCompressor是一款ohos高性能视频压缩器。 目前实现的能力&#xff1a; 支持视频压缩 使用本工程 有两种方式可以下载本工程&#xff1a; 开发者如果想要使用本工程,可以使用git命令 git clone https://gitee.com/openharmony-sig/ohos_videocompressor.git --…

Redis学习记录

Redis安装 首先是Redis的下载地址&#xff0c;事实上&#xff0c;Redis已经出到7的版本了&#xff0c;我们这里使用的是5的版本。&#xff08;3也能用&#xff09; Redis下载地址 我们将Redis下载下来并解压&#xff1a; 我们如何启动呢? redis-server.exe redis.windows.…

单分支:if语句

示例&#xff1a; /*** brief how about if? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <stdio.h>#define if_state…

学习笔记------约束的管理

此篇记录FPGA的静态时序分析&#xff0c;在学习FPGA的过程中&#xff0c;越发觉得对于时序约束只是懂了个皮毛。现在记录一下自己的学习过程。 本文摘自《VIVADO从此开始》高亚军 为什么要进行约束&#xff1f;约束的目的是什么&#xff1f; 简单来说&#xff0c;就是需要在…

Unity(MVC思想)

MVC 一下演示使用MVC和不使用MVC的做法区别。 前两个没有使用MVC 主面板逻辑&#xff1a; mainPanel是该脚本名字 每个场景中不一定存在该面板&#xff0c;单纯的显隐需要去手动挂载过于麻烦。 所以自己读取创建面板出来(每个场景仅创建一次)&#xff0c;存下该面板&#xf…

OpenHarmony网络请求库-httpclient

简介 HTTP是现代应用程序通过网络交换数据和媒体的的主要方式。httpclient是OpenHarmony 里一个高效执行的HTTP客户端&#xff0c;使用它可使您的内容加载更快&#xff0c;并节省您的流量。httpclient以人们耳熟能详的OKHTTP为基础&#xff0c;整合android-async-http&#xf…

FPGA核心板在声呐系统中的应用

前言 声纳系统使用声脉冲来探测、识别和跟踪水下物体。一个完整的声纳系统是由一个控制和显示部件、一个发射器电路、一个接收器电路和同时能作为发射装置&#xff08;扬声器&#xff09;和探测装置&#xff08;高灵敏度麦克风&#xff09;的传感器组成。 声纳系统图 技术挑战…

list基础知识

list 1.list 的定义和结构 list 是双向链表&#xff0c;是C的容器模板&#xff0c;其接收两个参数&#xff0c;即 list(a,b) 其中 a 表示指定容器中存储的数据类型&#xff0c;b 表示用于分配器内存的分配器类型&#xff0c;默认为 list <int>; list 的特点&#xff1a;…

鸿蒙开发岗突增!它和前端开发到底有哪些区别和联系?

2024年1 月 18 日&#xff0c;鸿蒙 Next 预览版面向开发者正式开放申请。至此&#xff0c;鸿蒙原生应用版图已成型&#xff0c;这个中国自主研发的操作系统&#xff0c;正式走上了独立之路。 有许多的公司都陆续地加入了鸿蒙原生应用开发的队列&#xff0c;从年初宣布的200个应…

MySQL高负载排查方法最佳实践(15/16)

高负载排查方法 CPU占用率过高问题排查 使用mpstat查看cpu使用情况。 # mpstat 是一款 CPU 性能指标实时展示工具 # 能展示每个 CPU 核的资源视情况&#xff0c;同时还能将资源使用情况进行汇总展示 # 如果CPU0 的 %idle 已经为 0 &#xff0c;说明此核已经非常繁忙# 打印所…

京西商城——前端项目的创建以及前后端联调

创建VUE项目 在jingxi_shop_project文件夹中再创建一个 frontend 文件夹用来存放前端项目 /jingxi_shop_project/backend/jingxi_shop_project....../frontend/jingxi_shop_web......首先要安装 node.js 和 VUE cli&#xff0c;进入到项目目录内创建项目 vue create jingxi_…

【JavaEE多线程】Thread类及其常见方法(上)

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️&#xff1a;清灵白羽 漾情天…

类和对象(中)(构造函数、析构函数和拷贝构造函数)

1.类的六个默认成员函数 任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 //空类 class Date{}; 默认成员函数&#xff1a;用户没有显示实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数 2.构造函数 构造函数 是一个 特殊的成员函数&a…

接口自动化入门: Http请求的域名与IP地址概念!

在进行接口自动化测试时&#xff0c;经常需要与服务器进行通信&#xff0c;这就涉及到了使用Http协议发送请求。在发送请求时&#xff0c;我们需要指定目标服务器的域名或者IP地址。下面将从0到1详细介绍域名与IP地址的概念及其在接口自动化测试中的应用。 本文从5个方面来书写…

3D可视化技术:研发基地的科技新篇章

在科技日新月异的今天&#xff0c;我们生活在一个充满无限可能性的时代。而在这个时代中&#xff0c;3D可视化技术正以其独特的魅力&#xff0c;引领着科技领域的新一轮变革。 3D可视化技术通过三维图像的方式&#xff0c;将现实世界或虚拟世界中的物体、场景等以立体、逼真的形…

改进下记录学习的小网站

Strong改进 结束&#xff1a;2024-4-14 打算投入&#xff1a;10h 实际消耗&#xff1a;12h 3m 学习总是不在状态。 我的时间花得很零散&#xff0c;也有点茫然。所以想尝试一下集中式地、一块一块地花&#xff0c;比如投入30个小时&#xff0c;去干一件事&#xff0c;这样就可…

npm怎么迁移到pnpm

下载的vue3模板用到了pnpm&#xff0c;就安装了一下 但是安装之后使用pnpm install 就发现包全被移动到ignored文件夹下面了,还报错 PS G:\Projects\gitProeject\TS_front> pnpm installWARN  Moving commitlint/config-conventional that was installed by a different …

继电器会不会被淘汰?

继电器作为一种电控制器件&#xff0c;其基本功能是在输入量达到一定条件时&#xff0c;使电气输出电路中的被控量发生预定的阶跃变化。 尽管现代电子技术发展迅速&#xff0c;新型产品不断涌现&#xff0c;但继电器因其独特的优势在许多应用领域仍然不可替代。 技术优势&#…

git 删除本地分支 删除远程仓库中的分支

语法&#xff1a; 删除本地分支 git branch -D <分支名>删除远程分支 git push <remote名称> <分支名> --delete 示例&#xff1a; 删除本地分支 git branch -D feature/test_listview删除远程分支 git push origin feature/test_listview --delete 两个…