題目:
我是超連結
題解:
woc!調了一大節課,還對拍樣程(「完全沒有問題啊,拍了一晚上都不帶錯的「),結果看好數量級之後強轉longlong才a了
**:
第一種解法:兩個點之間的距離是(i-j)(i-j-1)/2
方程:f[i]=min(f[j]+(i-j)(i-j-1)/2)+a[i]
#include
#include
#define ll long long
#define n 1000005
using namespace std;
int n,i;
ll f[n];ll a[n];int
q[n];
ll k(int j)
ll b(int j)
ll y(int i,int j)
bool fg(int x1,int x2,int x3)
int main()
printf("%lld\n",ans);
}
第二種解法:fi表示在i點建守衛塔的費用總和,轉移方程:f[i]=min(f[j]+s[i-1]-s[j]-d[j]*(c[i-1]-c[j]))+a[i]
其中di表示1~i的距離,ci表示1~i的點數,s表示的是d的字首和。
注意這裡第乙個必須選,所以開始的佇列不能為0,應該為1。並且最後乙個可以不選,單獨列舉。
#include
#include
#define ll long long
#define n 1000005
using namespace std;
ll f[n],a[n],s[n];int c[n],d[n],q[n];
ll k(int j)
ll b(int j)
ll y(int i,int j)
bool cover(int x1,int x2,int x3)
int main()
printf("%lld",ans);
}
BZOJ3156 防禦準備 斜率優化
第一行為乙個整數n表示戰線的總長度。第二行n個整數,第i個整數表示在位置i放置守衛塔的花費ai。共乙個整數,表示最小的戰線花費值。102 3 1 5 4 5 6 3 1 2 181 n 10 6,1 ai 10 9 題解 一眼看出斜率優化dp,先列出方程再說 令f i 表示在i處放置守衛塔,且i左面...
bzoj 3156 防禦準備 斜率優化 DP
傳送門 第一行為乙個整數n表示戰線的總長度。第二行n個整數,第i個整數表示在位置i放置守衛塔的花費ai。共乙個整數,表示最小的戰線花費值。10 2 3 1 5 4 5 6 3 1 2 181 n 10 6,1 ai 10 9 斜率優化 dp 因為最後乙個一定為守衛塔,所以輸入時預處理到過來,接下來說...
BZOJ3156 防禦準備 斜率優化dp
time limit 10 sec memory limit 512 mb submit 2207 solved 933 submit status discuss 第一行為乙個整數n表示戰線的總長度。第二行n個整數,第i個整數表示在位置i放置守衛塔的花費ai。共乙個整數,表示最小的戰線花費值。10...