bzoj
我太弱了 這種d
p 完全做不動。。
首先,感性理解一些
如果所有人都要早點走,
那麼,吃飯時間長的就先吃
吃飯時間短的就晚點吃
所以,按照吃飯時間排序
我們不難得出乙個每個人吃完飯的時間
之和前面所有人的打飯的時間和有關
所以 f[i
][j]
[k] 表示當前做到第
i 個人,第一列,第二列前面的人的打飯時間之和分別為j,
k時,最後乙個人吃完飯的最小時間
因為人的順序我們是知道的 所以j
+k是乙個定值,是所有人打飯時間的字首和
因此我們只需要記錄其中乙個
所以,狀態是f[
i][j
] 表示當前做到第
i 個人,
第一列隊伍前面所有人打飯的時間和是j時
最後乙個人吃完飯的最小時間
如果把這個人放在第一列 f[
i][j
]=mi
n(f[
i][j
],ma
x(f[
i−1]
[j−g
et[i
]],j
+eat
[i])
) 這個應該不難理解
另外乙個,把這個人放在第二列 f[
i][j
]=ma
x(f[
i−1]
[j],
sum[
i]−j
+eat
[i])
這題應該是乙個很顯然的dp
但是我卻做不出來
我果然太弱了
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define max 210
inline
int read()
struct peop[max];
int s[max],ans=2e9;
int f[max][max*max],n;
bool
operator
<(peo a,peo b)
int main()
}for(int i=0;i<=s[n];++i)ans=min(f[n][i],ans);
printf("%d\n",ans);
return
0;}
luogu P2577午餐 動態規劃
這其實是乙個揹包問題的變形,如果只有乙個視窗的話,對於排隊打飯的時間是固定的,那麼只要按照誰吃的慢誰先上就可以得出最優值。這道題有兩個視窗,貪心的方法還是一樣的,但是需要考慮分配問題。設dp i j k 下標 前i個人在視窗1花了j的打飯時間,在視窗2花了k的打飯時間。值 前i個人最小的用餐時間。設...
ZJOI2005 午餐 貪心,動態規劃
上午的訓練結束了,thu acm小組集體去吃午餐,他們一行n人來到了著名的十食堂。這裡有兩個打飯的視窗,每個視窗同一時刻只能給乙個人打飯。由於每個人的口味 以及胃口 不同,所以他們要吃的菜各有不同,打飯所要花費的時間是因人而異的。另外每個人吃飯的速度也不盡相同,所以吃飯花費的時間也是可能有所不同的。...
BZOJ1037動態規劃
資料範圍很小,可以用4維儲存下前i個男孩j個女孩,從這一位往前的所有點中男 女的差最大為x,女 男為y的方案數 主動遞推 f i 1 j x 1 max y 1 0 f i j x y f i j 1 max x 1 0 y 1 f i j x y 最後答案為 sigma x sigma y f n...