hdu 3001 dp 状态压缩 3进制
来源:互联网 发布:ie加载项中没有java 编辑:程序博客网 时间:2024/05/18 02:46
第一次做3进制的题 原理其实差不多,不过要多几个特判 又长姿势了。。。。
#include <iostream>#include <cstring>using namespace std;#define INF 0x3f3f3f3fint map[12][12];int dp[60000][12];int vis[60000][12];int dig[12];int minn;void init(int n){ dig[0]=1; for(int i=1; i<=n; i++) dig[i]=dig[i-1]*3; for(int i=0; i<=dig[n]; i++) { int p=i; for(int j=1; j<=10; j++) { vis[i][j]=p%3; p/=3; } }}int main(){ int n,m,a,b,c; init(10); while(cin>>n>>m) { minn=INF; memset(dp,INF,sizeof(dp)); memset(map,INF,sizeof(map)); int w=dig[n]; while(m--) { cin>>a>>b>>c; map[a][b]=map[b][a]=min(map[a][b],c); } for(int i=1; i<=n; i++) dp[dig[i-1]][i]=0; for(int i=0; i<w; i++) { int ans=1; for(int j=1; j<=n; j++) { if(vis[i][j]==0) ans=0; if(dp[i][j]==INF) continue; for(int k=1; k<=n; k++) { if(j==k||map[k][j]==INF||vis[i][k]>=2) continue; dp[i+dig[k-1]][k]=min(dp[i][j]+map[j][k],dp[i+dig[k-1]][k]); } } if(ans) { for(int j=1; j<=n; j++) { if(minn>dp[i][j]) minn=dp[i][j]; } } } if(minn==INF) cout<<-1<<endl; else cout<<minn<<endl; } return 0;}
0 0
- hdu 3001 dp 状态压缩 3进制
- HDU 3001 Travelling 状态压缩dp+3进制
- hdu 3001 dp+状态压缩
- 【状态压缩dp】HDU
- hdu 3001 Travelling 3进制状态压缩dp
- hdu 3001 3进制状态压缩dp,TSP
- hdu 3001 Travelling//状态压缩DP
- hdu 3001(状态压缩dp)
- HDU 3001 Travelling (状态压缩DP)
- HDU 3001 Travelling(DP状态压缩)
- hdu 3001(状态压缩dp)
- HDU 3001 Travelling(状态压缩dp)
- HDU 3001 Travelling(状态压缩DP)
- HDU 3001(状态压缩dp)
- HDU 3001 Travelling(状态压缩dp)
- hdu 3001 Travelling(状态压缩dp)
- [状态压缩DP+三进制] HDU 3001
- hdu(3920)状态压缩+dp
- AndroidManifest.xml配置文件详解
- Android输入法扩展之远程输入法
- thrift使用小记
- 迭代与递归:To Iterate,Human; to Recurse, Divine.
- Monkey 小试
- hdu 3001 dp 状态压缩 3进制
- 解决Flex项目下bin-debug文件在其他电脑打开不显示的问题
- 学拳录 18青龙出水
- sublime自动对齐插件
- ubumtu花屏了
- C/C++变量在内存中的分布
- SQL Server自定义函数
- 本次新生赛部分题解
- UVa10596 - Morning Walk(并查集)