IPUOJ24101旅行商问题(状压dp)

 

题目↓(建议全屏看图)

IPUOJ24101旅行商问题(状压dp)

 

常规状压,集合思想;挺简单的  具体看代码吧

#include<bits/stdc++.h>
using namespace std;
#define fr(g,h)  for(int g = 0; g < h; g++)
const int N = 25, M = 2100000;
int n,nn,mm,a[N][N],f[N][M];
inline void init ()
{
    scanf("%d",&n);
    fr(i,n)
      fr(j,n)
       cin >> a[i][j];
    memset(f, 0x3f, sizeof f);
}

void floyd()
{
    fr(k,n)
     fr(i,n)
      fr(j,n) 
       a[i][j] = min(a[i][j], a[i][k] + a[k][j]);
}

void dp()
{
  for(int s = 1; s <= (1 << n) - 1; s++)  //从第一个开始走过 (这个地方s的优化还是蛮重要的,暴力开210万只能险过)
   fr(i,n)
    fr(j,n)
     if(s & (1 << j)) 
     f[i][s|(1<<i)] = min(f[i][s|(1<<i)], f[j][s] + a[i][j]);
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
int main()
{
  init();
  f[0][1] = 0;
  floyd();
  dp();
  cout << f[0][(1<<n) - 1];
  return 0;    
}

 

上一篇:关于php mysqli函数的一些总结和实例(四)


下一篇:C# WinForm实现Windows 7 Aero磨砂玻璃效果