一句话题意:求必须包含某K条边的回路(回到1),使得总权值最小 转化为权值最小的联通的偶点 令F[i]表示联通状态为i的最小权值,(3^n状压)表示不在联通块内/奇点/偶点,连边时先不考虑必选的边的度数和权值 最后加上必须的边(保证必须的边都被选了) 连完这些边以后考虑剩下的一些奇点,两两配对,G[i]表示状态为i的奇点两两配对的代价(2^n状压) #include<cstdio> #include<algorithm> using namespace std; int cnt,n…
正题 题目链接:https://www.luogu.com.cn/problem/P6085 题目大意 \(n\)个点的一张无向图,有\(k\)条必走边,\(m\)条其他边,求从\(1\)出发经过必走边后回到起点的最短路径. \(2\leq n\leq 13,0\leq k\leq 78,2\leq m\leq 200\) 解题思路 可以理解为在只包含必走边的图上加若干条其他边使得这张图存在欧拉回路. 欧拉回路要求所有点联通且度数为偶数,考虑状态压缩\(dp\),设三进制的状态. \(f_s\)…
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4479 Description [故事背景]作为JSOI的著名吃货,JYY的理想之一就是吃遍全世界的美食.要走遍全世界当然需要不断的坐飞机了.而不同的航班上所提供的餐食是很不一样的:比如中国的航班会提供中餐,英国的航班有奶茶和蛋糕,澳大利亚的航班有海鲜,新加坡的航班会有冰激凌……JYY选出了一些他特别希望品尝餐食的航班,希望制定一个花费最少的旅游计划,能够从南京出发,乘坐所有这些航班并最…
若$k\leq 15$,那么可以设$d[i][S]$表示经过了$S$集合的边,现在位于$i$点的最短路. 可以用Dijkstra算法在$O(n^22^k)$时间内求出. 否则若$k>15$,那么最坏情况下,它们会形成一个团,将这$k$条边连上后,图中最多剩下$7$个连通块. 如果知道哪些边要走,哪些边不走的话,那么只要存在欧拉回路就可以. 也就是说,所有点的度数都是偶数,且从$1$出发可以到达$k$条边的端点. 于是考虑DP,设$f[i][j][k]$表示考虑前$i$条边,目前连通性为$j$,每…
嗯?这题竟然是个绿题. 这个题真的不(很)难,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的状压dp就可以了. 是的状压dp. 这个题的数据加强了,早已经不是搜索可以驾驭的了. 搜索的效率实在是有点低,我来算一个不准的效率,搜索的效率应该是O(n!).应该是吧. 状压dp只需要短短的O(2^n*n*n就可以了).状态共有2^n*n个,每次查找下一步需要O(n)的效率,所以状压dp的效率是O(2^n*n*n). 状压dp用一个二进制数表示哪…
吃 奶 酪 吃奶酪 吃奶酪 题目描述 房间里放着 n n n 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 ( 0 , 0 ) (0,0) (0,0)点处. 输入 第一行有一个整数,表示奶酪的数量 n n n. 第 22 到第 ( n + 1 ) (n+1) (n+1) 行,每行两个实数,第 ( i + 1 ) (i + 1) (i+1) 行的实数分别表示第 i 块奶酪的横纵坐 x i , y i x_i,y_i xi​,yi​ 输出 输出一行一个实数,表示要跑的最少距离,…
题目描述 分析 比较简单的状压DP 我们设\(f[i][j]\)为当前的状态为\(i\)且当前所在的位置为\(j\)时走过的最小距离 因为老鼠的坐标为\((0,0)\),所以我们要预处理出\(f[1<<(i-1)][i] (1 \leq i \leq n)\)的值 同时在读入的时候顺便处理处任意两个奶酪之间的距离 下面是状态转移方程 for(int i=1;i<(1<<n);i++){ for(int j=1;j<=n;j++){ if((i&(1<<…
1097: [POI2007]旅游景点atr Time Limit: 30 Sec  Memory Limit: 357 MBSubmit: 1531  Solved: 352[Submit][Status][Discuss] Description FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺序不是完全随意的,比如说FGD不希望在刚吃过一顿大餐之后立刻去下一个城市登山,而是希望去另外什么地方喝下午茶.幸运的是,FGD…
第一题: 给出一个长度不超过100只包含'B'和'R'的字符串,将其无限重复下去. 比如,BBRB则会形成 BBRBBBRBBBRB 现在给出一个区间[l,r]询问该区间内有多少个字符'B'(区间下标从1开始)   [1<=l,r<=1e18]解:  没想到第一题这么水.直接前缀和+mod就可以了,再判一下边界.注意1e18不需要高精度.long long 有9*10^18. #include<iostream> #include<cstdio> #include<…
题目链接: 题目 D. Kefa and Dishes time limit per test:2 seconds memory limit per test:256 megabytes 问题描述 When Kefa came to the restaurant and sat at a table, the waiter immediately brought him the menu. There were n dishes. Kefa knows that he needs exactly…