lightoj 1057 - Collecting Gold 状压DP求解TSP
来源:互联网 发布:手机怎么汉化软件 编辑:程序博客网 时间:2024/04/28 17:35
给定一张n*m的图,x是起点,g代表金子,然后一个人从x出发收集完所有的金子需要走多少步,八联通的图。
标准的TSP问题,直接拿挑战的代码上了。
#include<bits/stdc++.h>using namespace std;#define inf 0x7fffffffchar a[30][30];int dp[(1<<18)+10][18];struct node{ int x,y;}s[30];int dis(node a,node b){ return max(abs(a.x-b.x),abs(a.y-b.y));}int main(){ int t; scanf("%d",&t); for(int cas=1;cas<=t;cas++) { int n,m,cnt=1; scanf("%d %d",&n,&m); for(int i=0;i<n;i++) { scanf("%s",a[i]); for(int j=0;j<m;j++) { if(a[i][j]=='g') { s[cnt].x=i;s[cnt++].y=j; } if(a[i][j]=='x') { s[0].x=i; s[0].y=j; } } } memset(dp,127,sizeof(dp)); dp[(1<<cnt)-1][0]=0; for(int i=(1<<cnt)-2;i>=0;i--) { for(int v=0;v<cnt;v++) { for(int u=0;u<cnt;u++) { if(!(i>>u&1)) dp[i][v]=min(dp[i][v],dp[i|1<<u][u]+dis(s[v],s[u])); } } } printf("Case %d: %d\n",cas,dp[0][0]); } return 0;}
0 0
- lightoj 1057 - Collecting Gold 状压DP求解TSP
- LightOJ - 1057 Collecting Gold(状压DP)
- LightOJ 1057 - Collecting Gold (状压dp)
- LightOJ 1057 - Collecting Gold(状压DP)
- LightOJ 1057Collecting Gold(状压DP)
- LightOJ 1057 - Collecting Gold(dp)
- LightOJ 1057 Collecting Gold(简单状压DP)
- TSP问题(状压DP求解)
- light oj 1057 Collecting Gold(状态压缩dp)
- DP求解TSP问题
- poj 3311 dp求解TSP
- 1030 - Discovering Gold (lightoj 1030 概率DP)
- lightoj 1030 Discovering Gold (基础概率dp)
- 【期望dp】LightOJ 1030 Discovering Gold
- LightOJ 1030 - Discovering Gold (期望dp)
- LightOJ 1030 - Discovering Gold(dp)
- LightOJ 1030 Discovering Gold(期望DP)
- [LightOJ 1030] Discovering Gold (概率DP)
- ecshop之实现取消收藏功能
- c++实验-2-标准体重
- 为什么decltype((i))是一个引用
- oracle EBS采购订单各表作用分析
- XRecyclerView实现RecyclerView下拉刷新上来加载 自己做了部分修改,使代码更简洁易用
- lightoj 1057 - Collecting Gold 状压DP求解TSP
- C语言中文网_java复习进度
- Android Studio里面Failed to resolve: 包名 解决方式
- Android中ListView与RadioButton结合----自定义单选列表
- Debian软件包重编译方法
- C++第二次作业
- 商业智能与大数据结合的一点感想(old)
- 从数据库表中随机获取N条记录的SQL语句
- java 定义一个类型安全的Map