状态压缩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博客

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

储能逆变器测试负载箱基础认识

储能逆变器测试负载箱是专门用于测试储能逆变器的设备&#xff0c;它能够模拟真实的负载情况&#xff0c;对储能逆变器进行全面的性能测试。这种设备在新能源领域&#xff0c;特别是太阳能和风能领域有着广泛的应用。 储能逆变器将储存的电能转换为交流电&#xff0c;然后输出给…

Leetcode算法训练日记 | day27

一、组合总和 1.题目 Leetcode&#xff1a;第 39 题 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 c…

java 红黑树

01.红黑树的定义&#xff1a; 每一个结点有五个属性&#xff1a;

SQL Server Management Studio 显示行号

前言 在使用 SQL Server Management Studio (SSMS) 进行数据库管理和查询时&#xff0c;能够看到代码的行号是非常有用的。这可以帮助您更容易地定位代码错误、讨论特定的代码行&#xff0c;或者在执行长查询时快速找到特定行。在本文中&#xff0c;我将向您展示如何在 SSMS 中…

Redis中的Lua脚本(二)

Lua脚本 创建排序辅助函数 为了防止带有副作用的函数令脚本产生不一致的数据&#xff0c;Redis对math库的math.random函数和math.randomseed函数进行了替换。对于Lua脚本来说&#xff0c;另一个可能产生不一致数据的地方是哪些带有不确定性质的命令&#xff0c;比如对于一个集…

面试八股——线程

进程与线程的对比 线程的创建方式⭐ 继承Thread类 实现Runnable接口 实现Callable类 适用于需要获取返回值的线程。 线程池创建线程 Callable与Runnable的区别 1. 首先Runnable的run方法是没有返回值的&#xff0c;Callable的call方法有返回值。 2. Runnable不能向外抛出异常…

混合云构建-如何创建一个高可用的Site to Site VPN 连接 Azure 和GCP云

在现代云计算环境中,企业通常会采用多云战略,将工作负载分布在不同的云服务提供商上。这种方式可以提高可用性、降低供应商锁定风险,并利用每个云提供商的独特优势。然而,在这种情况下,需要确保不同云环境之间的互联互通,以实现无缝的数据传输和应用程序集成。 本文将详细介绍…

Python根据公募基金在一定时期内持有的股票数据进行社会网络分析

【背景】根据提供的公募基金在一定时期内持有的股票数据&#xff0c;构建一个社会网络分析框架&#xff0c;度量每个基金在每年的度中心度、介数中心度和特征向量中心度&#xff0c;并对相关数据做出简要说明。 【代码】 import networkx as nx import pandas as pd import n…

SpringBoot整合Mybatis实现从数据库中读取blob属性的图片在html页面中无法显示并且出现乱码实体类,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

大屏数字字体+渐变色

vue数据大屏使用数字字体_vue数字字体-CSDN博客 用css实现文字字体颜色渐变的三种方法_css 字体颜色渐变-CSDN博客

华为OD技术面试-有序数组第K最小值

背景 2024-03-15华为od 二面&#xff0c;记录结题过程 有序矩阵中第 K 小的元素 - 力扣&#xff08;LeetCode&#xff09; https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/submissions/512483717/ 题目 给你一个 n x n 矩阵 matrix &#xff0c;其…

HackMyVM-Gift

目录 信息收集 arp nmap WEB dirsearch hydra ssh连接 get root 信息收集 arp ┌─[rootparrot]─[~] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168.9.102 Starting arp-scan 1.10.0 with 256 hosts (https://git…