不管是幾進制,都用的是邏輯上概念,(上次六進制是用來轉化多維數據)核心思路是TSP。這裡的預處理比較巧妙,計算出了每種狀態下各個位上的模vis[][]。
TSP:dp[i][j] 在i狀態下,以j結尾的最優解。兩種轉移都行:我為人人,人人為我。
#include#include #include #include #define maxn 60000 #define inf 0x3f3f3f3f const double eps=1e-8; using namespace std; int dp[maxn][12]; int maps[13][12]; int vis[maxn][12]; int state[12]; int n,m; void init() { state[0]=1; for(int i=1;i<11;i++) state[i]=state[i-1]*3; for(int i=0;i<=state[10];i++) { int x=i; for(int j=0;j<10;j++) vis[i][j]=x%3,x/=3; } } int main() { // freopen("in.txt","r",stdin); while(~scanf("%d%d",&n,&m) ) { init(); memset(maps,0x3f,sizeof(maps)); for(int i=0;i