Travelling HDU - 3001
2018-06-17 21:49:10来源:未知 阅读 ()
Travelling HDU - 3001
方法:3进制状态压缩dp(更好的方法是预处理出每个状态数字对应的y数组,然后用刷表,时间复杂度可以少一个n)
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 typedef long long LL; 6 LL n,m,anss=0x3f3f3f3f3f3f3f3f; 7 LL y[20]; 8 LL dis[20][20]; 9 LL ans[100000][20]; 10 void split(LL x,LL y[]) 11 { 12 for(LL i=1;i<=n;i++) 13 { 14 y[i]=x%3; 15 x/=3; 16 } 17 } 18 LL merge(LL y[]) 19 { 20 LL ans=0,i,base=1; 21 for(i=1;i<=n;i++) 22 ans+=y[i]*base,base*=3; 23 return ans; 24 } 25 int main() 26 { 27 LL i,j,kk,k,a,b,c,p; 28 bool flag; 29 while(scanf("%lld%lld",&n,&m)==2) 30 { 31 anss=0x3f3f3f3f3f3f3f3f; 32 memset(dis,0x3f,sizeof(dis)); 33 memset(ans,0x3f,sizeof(ans)); 34 for(i=1;i<=m;i++) 35 { 36 scanf("%lld%lld%lld",&a,&b,&c); 37 dis[a][b]=min(dis[a][b],c); 38 dis[b][a]=min(dis[b][a],c); 39 } 40 for(i=0;i<=n;i++) 41 { 42 dis[0][i]=dis[i][0]=0; 43 dis[i][i]=0; 44 } 45 for(i=1;i<=n;i++) 46 y[i]=2; 47 kk=merge(y); 48 memset(ans[0],0,sizeof(ans[0])); 49 for(i=1;i<=kk;i++) 50 { 51 flag=true; 52 split(i,y); 53 for(j=1;j<=n;j++) 54 if(y[j]>0) 55 { 56 y[j]--; 57 p=merge(y); 58 for(k=1;k<=n;k++) 59 ans[i][j]=min(ans[i][j],ans[p][k]+dis[k][j]); 60 y[j]++; 61 } 62 else 63 flag=false; 64 if(flag) 65 anss=min(anss,*min_element(ans[i]+1,ans[i]+n+1)); 66 } 67 if(anss!=0x3f3f3f3f3f3f3f3f) 68 printf("%lld\n",anss); 69 else 70 printf("-1\n"); 71 } 72 return 0; 73 }
曾经错在:
1.65行,两个min打成max
2.每一组数据没有重置ans(浪费2小时)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:memset函数及注意事项
下一篇:深度优先搜索——地宫取宝
- HDU-2955-Robberies(0-1背包) 2020-03-30
- hdu1455 拼木棍(经典dfs) 2020-02-29
- anniversary party_hdu1520 2020-02-16
- hdu1062 text reverse 2020-01-27
- hdu4841 2020-01-26
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash