博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P2761 软件补丁问题(状压DP,SPFA)
阅读量:6987 次
发布时间:2019-06-27

本文共 1685 字,大约阅读时间需要 5 分钟。

题意

描述不清。。。

Sol

网络流24题里面怎么会有状压dp??

真是狗血,不过还是简单吧。

直接用$f[sta]$表示当前状态为$sta$时的最小花费

转移的时候枚举一下哪一个补丁可以搞这个状态

但是这玩意儿有后效性,可以用SPFA消去

 

#include
#include
#include
#include
using namespace std;const int MAXN = 101, INF = 1e9 + 10;inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {
if(c == '-') f = 1; c = getchar();} while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); return x * f;}int N, M;int tim[MAXN], dis[2097153], B1[MAXN], B2[MAXN], F1[MAXN], F2[MAXN], vis[2097153];int SPFA() { queue
q; q.push((1 << N) - 1); dis[(1 << N) - 1] = 0; while(!q.empty()) { int sta = q.front(); q.pop(); vis[sta] = 0; for(int i = 1; i <= M; i++) { int now = sta; if(((sta & B1[i]) == B1[i]) && ((sta & B2[i]) == 0)) { now = now & (~F1[i]); now = now | F2[i]; if(dis[now] > dis[sta] + tim[i]) { dis[now] = dis[sta] + tim[i]; if(!vis[now]) q.push(now); } } } } return dis[0] < INF ? dis[0] : 0;}int main() { N = read(); M = read(); memset(dis, 0x3f, sizeof(dis)); for(int i = 1; i <= M; i++) { char s1[21], s2[21]; scanf("%d %s %s", &tim[i], s1, s2); for(int j = 0; j < N; j++) if(s1[j] == '+') B1[i] |= 1 << j; else if(s1[j] == '-') B2[i] |= 1 << j; for(int j = 0; j < N; j++) if(s2[j] == '-') F1[i] |= 1 << j; else if(s2[j] == '+') F2[i] |= 1 << j; } printf("%d", SPFA()); return 0;}/*3 31 000 00-1 00- 0-+2 0-- -++*/

 

转载地址:http://tawvl.baihongyu.com/

你可能感兴趣的文章
java的输入输出流(一)
查看>>
《理财市场情绪监测系统》代码实现【1】之行业词库
查看>>
Shortest Path [3]
查看>>
离线情报分析工具CaseFile
查看>>
【iCore4 双核心板_FPGA】例程九:锁相环实验——锁相环使用
查看>>
SQL Server 审计
查看>>
Java并发编程(一)学习大纲
查看>>
centos 基础修改文件权限
查看>>
05Hadoop-左外连接
查看>>
BBS论坛(四)
查看>>
轮询、长轮询、长连接、socket连接、WebSocket
查看>>
python3 识别图片文字
查看>>
aspx->cs->dll :在部署后就让所有的aspx处于已经编译成dll的状态
查看>>
存储过程介绍及asp存储过程的使用
查看>>
hibernate---->多对一关联映射
查看>>
学习动态性能表(5)--v$session
查看>>
文字在div中水平和垂直居中的的css样式
查看>>
spring与hibernate整合
查看>>
cocos creator protobuf实践
查看>>
ShellExecute
查看>>