題目大意:將n個數分成若干組,並且每組的數在原陣列中應是連續的,每組會產生的代價為sum(i)-sum(j)+i-j-1-m,m為已知的常數。求最小代價。
題目分析:定義dp(i)表示將前 i 個元素分好組後產生的最小代價,狀態轉移方程很顯然了:
dp(i)=min(dp(j)+[sum(i)-sum(j)+i-j-1-m)]^2)。另f(i)=sum(i)+i,並且另g(i)=f(i)-1-m,則dp(i)可整理成dp(i)=min(dp(j)+sum(j)^2-2*g(i)*sum(j))+g(i)。很顯然需要斜率優化。
**如下:
# include# include# include# includeusing namespace std;# define ll long long
const int n=50005;
int n,m;
int q[n];
ll a[n];
ll dp[n];
ll sum[n];
void read(ll &x)
}void init()
for(int i=1;i<=n;++i)
sum[i]+=i;
}ll getson(int k,int j)
ll getmother(int k,int j)
double getk(int i,int j)
ll todp(int j,int i)
ll solve()
return dp[n];
}int main()
return 0;
}
BZOJ1010 玩具裝箱toy
1010 hnoi2008 玩具裝箱toy time limit 1 sec memory limit 162 mb submit 7631 solved 2924 description p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任...
BZOJ1010玩具裝箱Toy
p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓 縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中.p教授有編號為1.n的n 件玩具,第 i件玩具經過壓縮後變成一維長度為ci 為了方便整理,p教授要求在乙個一維容器中的玩具編號是連續的。同時如果...
BZOJ1010 玩具裝箱toy
題目鏈結 bzoj1010 題目大意把n 個數分成若干段,從i到 j 分為一段的花費co st i j jk iva l k j i 求最小花費。分析 1.斜率優化dp,dp i min dp j co st j 1 i 2.先把l 1 設f x xk 1 val k x ff x d p x f ...