長春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 #includehdu36753 #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 }
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...