#include <bits/stdc++.h>
using namespace std;
/*
题目大意:
给定n个点m条边的带权无向图,问有没有可能从n个点的其中一个出发,走遍其余n - 1个点,并且保证
每个点最多经过两次,如果可以,输出最小费用;不可以输出-1。
思路:
旅行商问题改为三进制状压dp。
*/
typedef long long ll;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const double eps = 1e-6;
const double pi = acos(-1.0);
const int MAX_STATE = pow(3, 10);
int G[10][10];
int dp[MAX_STATE][10];
int add[10];
void init_add() // 预处理每一位加1需要增加的值
{
int p = 1;
for(int i = 0; i <
HDU-3001(旅行商问题+三进制状压dp)
最新推荐文章于 2022-12-04 16:44:30 发布
该博客介绍了如何将经典的旅行商问题转化为三进制动态规划来求解,通过预处理和优化,寻找从给定点出发,经过其他所有点且每个点最多经过两次的最小费用路径。代码实现中涉及图的表示、动态规划状态转移矩阵的初始化和更新,以及关键状态的检查。

最低0.47元/天 解锁文章
680

被折叠的 条评论
为什么被折叠?



