HDU 1964 Pipes

HDU_1964

    这个题目只需要把求回路数量的dp方程改写成取最优解的dp方程即可。

    更多和插头dp相关的题目可以参考胡浩的博客:http://www.notonlysuccess.com/index.php/plug-dp-complete/

#include<stdio.h>
#include<string.h>
#define MAXD 15
#define HASH 30007
#define SIZE 1000010
#define INF 0x3f3f3f3f
int N, M, code[MAXD], ch[MAXD], maze[MAXD][MAXD], rcost[MAXD][MAXD], dcost[MAXD][MAXD];
char b[50];
struct Hashmap
{int head[HASH], next[SIZE], state[SIZE], f[SIZE], size;void init(){memset(head, -1, sizeof(head));size = 0;}void push(int st, int ans){int i, h = st % HASH;for(i = head[h]; i != -1; i = next[i])if(state[i] == st){if(ans < f[i])f[i] = ans;return ;}state[size] = st, f[size] = ans;next[size] = head[h];head[h] = size ++;}
}hm[2];
void decode(int *code, int m, int st)
{int i;for(i = m; i >= 0; i --){code[i] = st & 7;st >>= 3;}
}
int encode(int *code, int m)
{int i, cnt = 0, st = 0;memset(ch, -1, sizeof(ch));ch[0] = 0;for(i = 0; i <= m; i ++){if(ch[code[i]] == -1)ch[code[i]] = ++ cnt;code[i] = ch[code[i]];st <<= 3;st |= code[i];}return st;
}
void init()
{int i, j, k;gets(b), sscanf(b, "%d%d", &N, &M);memset(maze, 0, sizeof(maze));for(i = 1; i <= N; i ++)for(j = 1; j <= M; j ++)maze[i][j] = 1;gets(b);for(i = 1; i < 2 * N; i ++){gets(b);if(i & 1){for(j = 1, k = 2; k < 2 * M; j ++, k += 2)rcost[(i + 1) >> 1][j] = b[k] - '0';}else{for(j = 1, k = 1; k < 2 * M; j ++, k += 2)dcost[i >> 1][j] = b[k] - '0';}}gets(b);
}
void shift(int *code, int m)
{int i;for(i = m; i > 0; i --)code[i] = code[i - 1];code[0] = 0;
}
void dpblank(int i, int j, int cur)
{int k, left, up, t;for(k = 0; k < hm[cur].size; k ++){decode(code, M, hm[cur].state[k]);left = code[j - 1], up = code[j];if(left && up){if(left == up){if(i == N && j == M){code[j - 1] = code[j] = 0;shift(code, M);hm[cur ^ 1].push(encode(code, M), hm[cur].f[k]);}}else{code[j - 1] = code[j] = 0;for(t = 0; t <= M; t ++)if(code[t] == up)code[t] = left;if(j == M)shift(code, M);hm[cur ^ 1].push(encode(code, M), hm[cur].f[k]);}}else if(left || up){if(maze[i][j + 1]){code[j - 1] = 0, code[j] = left + up;hm[cur ^ 1].push(encode(code, M), hm[cur].f[k] + rcost[i][j]);}if(maze[i + 1][j]){code[j - 1] = left + up, code[j] = 0;if(j == M)shift(code, M);hm[cur ^ 1].push(encode(code, M), hm[cur].f[k] + dcost[i][j]);}}else{if(maze[i][j + 1] && maze[i + 1][j]){code[j - 1] = code[j] = 13;hm[cur ^ 1].push(encode(code, M), hm[cur].f[k] + rcost[i][j] + dcost[i][j]);}}}
}
void solve()
{int i, j, cur = 0, ans = INF;hm[cur].init();hm[cur].push(0, 0);for(i = 1; i <= N; i ++)for(j = 1; j <= M; j ++){hm[cur ^ 1].init();dpblank(i, j, cur);cur ^= 1;}for(i = 0; i < hm[cur].size; i ++)if(hm[cur].f[i] < ans)ans = hm[cur].f[i];printf("%d\n", ans);
}
int main()
{int t;gets(b), sscanf(b, "%d", &t);while(t --){init();solve();}return 0;
}

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

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

相关文章

算法证明:女生遇到心动的男人一定要追!

全世界有3.14 % 的人已经关注了数据与算法之美我来讲恋爱中的博弈&#xff0c;不&#xff0c;我来讲恋爱中的算法&#xff0c;不&#xff0c;我来讲算法&#xff01;&#xff01;有个著名的问题&#xff0c;叫做 stable matching。早年是一个可爱的俄罗斯老头在图论课上教我的&…

php文字左右滚动代码,JavaScript

js文字横向滚动特效本文为大家分享了js文字横向滚动特效代码&#xff0c;具体实现内容如下&#xff1a;页面布局恭喜793765***获得 50元巨人点卡奖励恭喜793765***获得 50元巨人点卡奖励恭喜793765***获得 50元巨人点卡奖励恭喜793765***获得 50元巨人点卡奖励恭喜793765***获得…

记一次 .NET 某教育系统 异常崩溃分析

一&#xff1a;背景 1. 讲故事这篇文章起源于 搬砖队大佬 的精彩文章 WinDBg定位asp.net mvc项目异常崩溃源码位置 &#xff0c;写的非常好&#xff0c;不过美中不足的是通览全文之后&#xff0c;总觉得有那么一点不过瘾&#xff0c;就是没有把当时抛异常前的参数给找出来。。。…

Json.Net系列教程 3.Json.Net序列化和反序列化设置

上节补充首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化.创建一个DataTable对象,如下: DataTable dt new DataTable();DataColumn dcName new DataColumn("Name");DataColu…

5道谷歌面试题:即使是天才也要怀疑自己能力了(附答案)

全世界只有3.14 % 的人关注了数据与算法之美谷歌&#xff0c;美国的跨国科技企业&#xff0c;致力于互联网搜索、云计算、广告技术等领域&#xff0c;开发并提供大量基于互联网的产品与服务。这样一家实力雄厚前景无量的公司是众多求职者梦寐以求的地方&#xff0c;然而&#x…

红玫瑰数java的意思,红玫瑰的含义,玫瑰花个数的含义

导航&#xff1a;网站首页 >红玫瑰的含义,玫瑰花个数的含义时间&#xff1a;2018-2-27相关问题:匿名网友:1朵玫瑰代表——我的心中只有你ONLY YOU&#xff01;2朵玫瑰代表——这世界只有我俩&#xff01;3朵玫瑰代表——我爱你I LOVE YOU&#xff01;4朵玫瑰代表——至死不渝…

(装载)C#中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别

// 获取程序的基目录。System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径。System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。System.Environment.CurrentDirectory // 获…

[Abp vNext 源码分析] - 18. 单元测试

简介ABP vNext 框架使用 xUnit 作为单元测试组件&#xff0c;官方的所有模块都编写了大量的 单元/集成测试 确保功能正常。由于 ABP vNext 模块化系统的原因&#xff0c;开发人员在建立单元测试项目的时候需要集成 Volo.Abp.UnitTest 项目&#xff0c;这样在执行单元测试的时候…

php表格单元格怎么实现排序,javascript实现对表格元素进行排序操作

我们在上网中都能看到很多能够排序的&#xff0c;如大小、时间、价格等现在我们也试一下排序功能&#xff1a;排序的函数代码&#xff1a;里面含有点击之后排序--还原&#xff0c;和排升序和降序。function sortAge(){//对年龄进行排序&#xff0c;要先进行获得每一行对象&…

【10.29周一电商,已好】中国日历的至高境界,377张震撼级插画,美到爆!

每段时光都有属于每段时光的回忆它们是童年的纸飞机是校园时代的试卷与课本是第一次离开家乡时的兴奋与忐忑是跟某个人眼神交汇时的慌乱...回忆如此珍贵&#xff0c;以致于令我们频频回想&#xff0c;渴望着回到过去&#xff0c;与美好再度相逢。还记得文先生给大家推荐过的新一…

设置润乾报表鼠标移到格子上就显示提示内容

为了达到一定的交互性和易用性,我们一般喜欢将鼠标移动到格子上就能显示出一定的提示信息,比方说这个格子大小固定了但是里面内容超出格子了,这样我们希望鼠标移动过去后能自动提示所有的内容。用润乾报表可以这样设计&#xff1a; 比方说一个格子里面有如下内容 “这是一个很长…

ASP.NET Core 单元测试:如何Mock Url.Page()

点击上方蓝字关注“汪宇杰博客”导语在 ASP.NET Core 中&#xff0c;当你在 UrlHelperExtensions 类上使用扩展方法时&#xff0c;很难在单元测试中编写Mock。因为Moq框架不支持模拟扩展方法。问题例如&#xff0c;我的博客代码中使用了 Url.Page() 方法&#xff1a;var callba…

matlab dwt函数应用,MATLAB中关于DCT,DFT和DWT的相关函数

1. 离散傅立叶变换的 Matlab 实现Matlab 函数 fft、fft2 和 fftn 分别可以实现一维、二维和 N 维 DFT 算法&#xff1b;而函数 ifft、ifft2 和ifftn 则用来计算反 DFT 。这些函数的调用格式如下&#xff1a;A&#xff1d;fft(X,N,DIM)其中&#xff0c;X 表示输入图像&#xff1…

“甜橙金融杯”数据建模大赛发布,8万重金寻找大数据金融人才!

全世界有3.14 % 的人已经关注了数据与算法之美随着互联网概念不断发展&#xff0c;越来越多的商家进入这一市场。为了在竞争中拉取新用户&#xff0c;培养用户的消费习惯&#xff0c;各种类型的营销和补贴活动层出不穷。为正常用户带来福利的同时&#xff0c;也催生了一批“羊毛…

常用加解密工具集合|视频图片加解密方案

最近工作需要做视频加密解密&#xff0c;大概需求就是摄像头录制好的视频实时加密存储到本地&#xff0c;防止别人拔掉存储卡把视频拷贝走。大胆设想一下&#xff0c;假如现在很多网约车车内都有摄像头&#xff0c;这些对着乘客和司机的车内摄像头都是实时录制视频并存储到本地…

修炼九阴真经Windows Phone开发 (7):本地化应用程序栏Localizing an Application Bar 下...

本节介绍另一个本地化的方法&#xff1a; 在项目中添加资源文件&#xff1a;&#xff08;这个文件将包含应用程序的默认语言的资源&#xff09; 将要名称和值添加进去。&#xff08;作为应用程序中向用户显示字符串值&#xff09;. 重复上面的方法&#xff0c;向项目中添加更多…

matlab编程数字信号,MATLAB--数字信号实验.doc

MATLAB--数字信号实验前言MATLAB 是一套功能强大的工程计算及数据处理软件&#xff0c;广泛应用于工业&#xff0c;电子&#xff0c;医疗和建筑等众多领域。它是一种面向对象的&#xff0c;交互式程序设计语言&#xff0c;其结构完整又优良的可移植性。它在矩阵运算&#xff0c…

统治世界的十大算法

全世界有3.14 % 的人已经关注了数据与算法之美软件正在统治世界。而软件的核心则是算法。算法千千万万&#xff0c;又有哪些算法属于“皇冠上的珍珠”呢&#xff1f;Marcos Otero 给出了他的看法。什么是算法&#xff1f;通俗而言&#xff0c;算法是一个定义明确的计算过程&…

Hosting in .NET Core

在.NET Core中&#xff0c;Host负责应用程序的启动和生命周期管理。除此之外&#xff0c;在Host中还可以设置日志(Logging)、配置(Configuration)和依赖关系注入(Dependency Injection)等。Host将一个常规的控制台应用程序(Console Application)变成了一个可以长时间运行的服务…

hilbert曲线序编码matlab,Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码

Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码王笋,徐小双(华中科技大学控制科学与工程系&#xff0c;武汉 430074)摘 要Hilbert曲线是一种重要的图像处理工具,在图像处理,特别是图像扫描中广泛应用.为了正确快速的生成Hilbert曲线扫描矩阵,提出了基于矩阵运算的生成Hilber…