hdu4675 TSP 區間DP 記錄轉移

2022-05-31 18:09:08 字數 1558 閱讀 9288

長春online的題目,

當時讀了就推出了分治+記憶化搜尋,其實就是區間dp。時間不夠就沒寫,還是太弱了。這種題目,**量,應該在30min內a掉。

dp[i][j][k]表示處理(i,j)內,先訪問k+的最小路程。

注意到k==j時,列舉dp[i][j-1][x],路徑為:j+ x+ dp[i][j-1][x-1] (j-1)- j-。

k

1 #include2 #include

3 #include4 #include5

6using

namespace

std;78

const

int maxn = 111;9

const

double inf = 1000000000;10

struct

point

11 p[maxn][2

];14

intn;

1516

double

diss(point a, point b)

1720

double dis[maxn][maxn][2][2

];21

double

dp[maxn][maxn][maxn];

22int

path[maxn][maxn][maxn];

2324

void dfs_out(int l,int r,int

p)25

35return;36

}37int x =path[l][r][p];

38if (l

3948}49

else

5054}55

return;56

}57intmain()

5867}68

for (int i=1; i<=n; i++)

69for (int j=1; j<=n; j++)

7076}77

78for (int i=n; i>=1; i--)

7988

for (int k=i; k<=j; k++)

89101

}102 dp[i][j][k] =tmp;

103}

104else

105115

}116 dp[i][j][k] =tmp;

117}

118}

119}

120}

121122

double ans =inf;

123int p = 0

;124

for (int i=1; i<=n; i++)

125131

}132

//printf("%lf\n",ans);

133 dfs_out(1

,n,p);

134 puts(""

);135

}136

return0;

137 }

hdu3675

HDU 5115 經典區間dp

題意 n頭狼,殺死第i頭狼會受到b i 1 b i 1 a i 的傷害,問殺死所有狼受到的最小傷害值。因為無論怎麼選,a值都只需要加一遍,所以先把a的和算出來,最後加到答案上就行了。我們可以在兩邊加一頭a值和b值都為0的狼,dp i j min dp i j dp i k dp k j b i b ...

HDU 5115 經典區間dp

題意 給定n個狼的攻擊值ai和附加攻擊值bi,每殺死一匹狼i,受到的傷害等於i的攻擊值和與i相鄰的狼的附加攻擊值。求殺死所有的狼受到的傷害的最小值。dp i j 殺死區間i j的狼受到傷害的最小值。初始化 a 0 a n 1 b 0 b n 1 0 for int i 1 i n i dp i i ...

hdu4283 經典區間dp

input 多組輸入用例t,每組第一行是小姐姐的數量,以下n行按照順序表示第1個到第n個小姐姐的耐心度m對於每組資料輸出,一行輸出乙個值,代表cry的最大快樂值,即小姐姐們耐心值的最小和。1 n 100,0 m 100 output 輸出cry的最大快樂值,具體輸出參照樣例。sample input...