傳送門
考慮用dp[i]表示把前i個地點的物品全部安置好的最小花費。因為物品只能往下運,所以當前這個位置必須建倉庫,dp方程很好想:
\[dp[i] = min_^\^ p[k] * (x[i] - x[k])\} + c[i]
\]用\(sum[n]\)表示\(\sum_^np[i]\),\(ssum[n]\)表示\(\sum_^np[i] * x[i]\)
之後把式子變個型套斜率優化就好了。得到:
\(\frac < x[i]\)時,q比p優。
因為這個x[i]是單調遞增的,所以不用考慮特別多,套斜率優化即可。
#include#include#include#include#include#include#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')
#define pr pair#define mp make_pair
#define fi first
#define sc second
using namespace std;
typedef long long ll;
const int m = 1000005;
const int n = 10000005;
ll read()
while(ch >='0' && ch <= '9') ans = ans * 10 + ch - '0',ch = getchar();
return ans * op;
}struct node
a[m];
ll sum[m],ssum[m],dp[m],n,q[m],head,tail;
double slope(ll p,ll q)
int main()
printf("%lld\n",dp[n]);
return 0;
}
ZJOI2007 倉庫建設
l公司有n個工廠,由高到底分布在一座山上。如圖所示,工廠1在山頂,工廠n在山腳。由於這座山處於高原內陸地區 乾燥少雨 l公司一般把產品直接堆放在露天,以節省費用。突然有一天,l公司的總裁l先生接到氣象部門的 被告知三天之後將有一場暴雨,於是l先生決定緊急在某些工廠建立一些倉庫以免產品被淋壞。由於地形...
ZJOI 2007 倉庫建設
注意到我們所有的東西都只能轉移到後面,那麼可以考慮dp 用dp i 表示以i結尾建立倉庫的最小花費 那麼dp i min dp i dp j w i sigma dis i dis k num k 這個dp直接轉移是n 2 考慮優化這個dp 然後他是由前面所有的轉移過來,而且還有其他的陣列來計算答案...
ZJOI 2007 倉庫建設
這道題不算很難,這裡我提供兩種做法。設 dp i 為在 i 位上設定倉庫,前面工廠都解決了的最小花費。首先我們可以列出 dp 式 dp i min dp j sigma p k x i x k c i 即 dp i min dp j x i sigma p k sigma p k x k c i 我...