博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5067 Harry And Dig Machine
阅读量:5340 次
发布时间:2019-06-15

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

http://acm.hdu.edu.cn/showproblem.php?pid=5067

 思路:问题可以转化成:从某一点出发,遍历网格上的一些点,每个点至少访问一次需要的最小时间是多少。这就是经典的旅行商问题,考虑到我们必须要遍历的点只有不到10个,可以用状态压缩解决。

dp[i][j]表示i状态的点被访问过了,当前停留在点j 需要的最少时间,状态转移方程:dp[i|(1<<k)][k]=min(dp[i|(1<<k)][k],dp[i][j]+abs(q[j].x-q[k].x)+abs(q[j].y-q[k].y));

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 const int inf=1<<30; 7 8 int n,m; 9 int g[100][100];10 int dp[1<<11][100];11 struct node12 {13 int x,y;14 }st;15 16 int main()17 {18 while(scanf("%d%d",&n,&m)!=EOF)19 {20 vector
q;21 for(int i=1; i<=n; i++)22 {23 for(int j=1; j<=m; j++)24 {25 scanf("%d",&g[i][j]);26 if(i==1&&j==1)27 {28 st.x=i;29 st.y=j;30 q.push_back(st);31 }32 else if(g[i][j])33 {34 st.x=i;35 st.y=j;36 q.push_back(st);37 }38 }39 }40 int x=q.size();41 for(int i=0; i<(1<
View Code

 

Dp[i|(1≪k)][k]=min(Dp[i|(1≪k)][k],Dp[i][j]+Dis(j,k))

转载于:https://www.cnblogs.com/fanminghui/p/4326217.html

你可能感兴趣的文章
AngularJs练习Demo14自定义服务
查看>>
stat filename
查看>>
关于空想X
查看>>
CF1067C Knights 构造
查看>>
[BZOJ2938] 病毒
查看>>
webstorm修改文件,webpack-dev-server不会自动编译刷新
查看>>
Scikit-learn 库的使用
查看>>
CSS: caption-side 属性
查看>>
python 用数组实现队列
查看>>
认证和授权(Authentication和Authorization)
查看>>
Mac上安装Tomcat
查看>>
CSS3中box-sizing的理解
查看>>
传统企业-全渠道营销解决方案-1
查看>>
Lucene全文检索
查看>>
awk工具-解析1
查看>>
推荐一款可以直接下载浏览器sources资源的Chrome插件
查看>>
CRM product UI里assignment block的显示隐藏逻辑
查看>>
展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告...
查看>>
AMH V4.5 – 基于AMH4.2的第三方开发版
查看>>
Mac下安装npm全局包提示权限不够
查看>>