程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 3001(狀壓dp+三進制)

hdu 3001(狀壓dp+三進制)

編輯:C++入門知識

hdu 3001(狀壓dp+三進制)


不管是幾進制,都用的是邏輯上概念,(上次六進制是用來轉化多維數據)核心思路是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


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved