小伙伴出的题。

一眼看出是状压DP裸题。回忆poj2288 islands and bridges,然后就很好写了。

啪啪啪打了个状压DP出来(晚上寝室写的,其实是记忆化搜索),发现sum总是INF

然后发现:printf函数调用的貌似不是运行solve之后的,而是还未运行solve时的值。

于是分开写就A了。

出题者跑了一秒多,貌似用的二分...反正不怎么看得懂。

果然DP大法吼哇!

 #include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long LL;
using std::max;
using std::min;
const int N = ;
LL INF;
int n; LL f[ << N][N], sum[ << N][N], G[N][N]; void cal(int sta) {
int t[N];
for(int i = ; i < n; i++) {
t[i] = (sta >> i) & ;
}
for(int i = n - ; i >= ; i--) {
printf("%d", t[i]);
}
return;
} LL solve(int i, int j) { if(f[i][j] != INF) {
//printf("solve: ");
//cal(i);
//printf(" %d ans = %lld sum = %lld \n", j, f[i][j], sum[i][j]);
return f[i][j];
} int ct = ;
for(int ii = ; ii < n; ii++) {
ct += (i >> ii) & ;
}
if(ct < ) {
f[i][j] = INF - ;
return INF - ;
} LL ans = INF - , len = INF - ;
int sta = ((~( << j)) & i);
for(int ii = ; ii < n; ii++) {
if(!(G[ii][j] && ((i >> ii) & ))) {
continue;
}
LL t_ans = max(solve(sta, ii), G[ii][j]);
LL t_len = sum[sta][ii] + G[ii][j];
if(t_ans < ans) {
ans = t_ans;
len = t_len;
}
else if(ans == t_ans) {
len = min(len, t_len);
}
}
f[i][j] = ans;
sum[i][j] = len;
//printf("solve: ");
//cal(i);
//printf(" %d ans = %lld sum = %lld \n", j, ans, len);
return ans;
} int main() {
memset(f, 0x7f, sizeof(f));
memset(sum, 0x7f, sizeof(sum));
INF = sum[][]; int m, x, y;
LL R, z;
scanf("%d%d%lld", &n, &m, &R);
for(int i = ; i <= m; i++) {
scanf("%d%d%lld", &x, &y, &z);
x--; y--;
if(x == y || z > R) continue;
if(G[x][y]) z = min(z, G[x][y]);
G[x][y] = G[y][x] = z;
}
for(int i = ; i < n; i++) {
if(G[][i]) {
int sta = | ( << i);
f[sta][i] = G[][i];
sum[sta][i] = G[][i];
}
}
int ed = ( << n) - ;
LL ans = solve(ed, (n - ));
LL len = sum[ed][n - ];
if(ans >= INF - ) {
printf("wuwuwu~");
}
else {
printf("%lld %lld", ans, len);
}
return ;
}

AC代码

洛谷T31039 九尾狐吃棉花糖的更多相关文章

  1. 洛谷 P1736 创意吃鱼法

    题目描述 题目链接:https://www.luogu.org/problemnew/show/P1736 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢( ...

  2. 洛谷 P1736 创意吃鱼法 Label:dp || 前缀和

    题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...

  3. 洛谷P1736 创意吃鱼法

    题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...

  4. 洛谷P1736 创意吃鱼法 dp

    正解:dp 解题报告: 早就想写dp的题目辣!我发现我的dp好差啊QAQ所以看到列表的小朋友写dp的题目就跟着他们的步伐做下题好辣QwQ 这题的话没有那——么难,大概说下趴QwQ 首先说下题意 前面一 ...

  5. 洛谷 P4066 [SHOI2003]吃豆豆 解题报告

    P4066 [SHOI2003]吃豆豆 题目描述 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的路线很奇怪 ...

  6. 洛谷 P1736 创意吃鱼法(多维DP)

    题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...

  7. 洛谷 P2069 松鼠吃果子

    P2069 松鼠吃果子 题目描述 有N个一种松鼠喜欢吃的果子由下向上串排成一列,并标号1,2,...N.一只松鼠从最下果子开始向上跳,并且第i次跳可以一次跳过i*i*i除以5的余数+1个果子(=i*i ...

  8. 题解【洛谷P1433】吃奶酪

    题面 看到数据范围那么小,一眼状压\(\text{DP}\). 设\(dp[i][s]\)表示从\(i\)出发,走过的点的集合为\(s\)的最小距离. 不难推出转移方程(\(dis(i,j)\)为\( ...

  9. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

随机推荐

  1. C# Note5:使用相对路径读取文件

    一.C#中使用相对路径读取配置文件 一般Solution的目录结构如下图所示: (如过看不到某些文件,可以点击 “显示所有文件” 图标) 方法一:由于生成的exe文件在bin\debug目录下,可以使 ...

  2. 校园电商项目(1) 基于SSM

    第一步:搭好环境 我这里使用Eclipse做本次的项目,tomcat.maven啥的怎么弄就跳过了ヾ(o・ω・)ノ 第二步:创建工程 我们首先创建一个maven项目,选择最后一个,创建完之后发现报错, ...

  3. MyBatis基础:MyBatis数据基本操作(2)

    1. MyBatis映射器 2. MyBatis数据基本操作 示例项目结构: <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...

  4. Java面向对象之多态的静态和动态实现

    简单而言: 静态多态:即为重载,方法的重载 动态多态:即为重写/覆盖,方法的重写

  5. swagger bug

    https://blog.csdn.net/u011943534/article/details/81778125 处理swagger报错Could not resolve pointer: /def ...

  6. HTML中文本过长时自动隐藏末尾部分或中间等任意部分

    一.    一般情况下,HTML字符串过长时都会将超过的部分隐藏点,方法如下: 设置CSS: .ellipsis-type{ max-width: 50px;                      ...

  7. Condition线程通信(七)

    前言:对于线程通信,使用synchronized时使用wait.notify和notifyAll来实行线程通信.而使用Lock如何处理线程通信呢?答案就是本片的主角:Condition. 一.Cond ...

  8. javascript中关于value的一个小知识点(value既是属性也是变量)

    今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻 [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" va ...

  9. 找工作的程序员必懂的Linux

    一.为什么要学习Linux 首先,我想先说一下:“为什么要学习Linux”?Linux 是什么,它是一款操作系统,是一个支持多用户.多任务.支持多线程和多CPU的操作系统:32位和64位的硬件可以在L ...

  10. django中怎么使用自定义管理后台xadmin

    django中怎么使用自定义管理后台xadmin 2018年05月19日 15:48:08 LH_python 阅读数:1001   首先创建基本的django项目,配置好基本的model ,url, ...