【UESTC 594】我要长高
題目連接:https://vjudge.net/problem/UESTC-594
韓父有NN個兒子,分別是韓一,韓二…韓NN。由于韓家演技功底深厚,加上他們間的密切配合,演出獲得了巨大成功,票房甚至高達20002000萬。舟子是名很有威望的公知,可是他表面上兩袖清風實則內心陰暗,看到韓家紅紅火火,嫉妒心遂起,便發微薄調侃韓二們站成一列時身高參差不齊。由于舟子的影響力,隨口一句便會造成韓家的巨大損失,具體虧損是這樣計算的,韓一,韓二…韓NN站成一排,損失即為C×C×(韓ii與韓i+1i+1的高度差(1≤i<N1≤i<N))之和,搞不好連女兒都賠了.韓父苦苦思索,決定給韓子們內增高(注意韓子們變矮是不科學的只能增高或什么也不做),增高11cm是很容易的,可是增高1010cm花費就很大了,對任意韓ii,增高HHcm的花費是H2H2.請你幫助韓父讓韓家損失最小。
Input
有若干組數據,一直處理到文件結束。
每組數據第一行為兩個整數:韓子數量NN(1≤N≤500001≤N≤50000)和舟子系數CC(1≤C≤1001≤C≤100)
接下來NN行分別是韓i的高度(1≤hi≤1001≤hi≤100)。
Output
對每組測試數據用一行輸出韓家的最小損失。
Sample Input
5 2 2 3 5 1 4Sample Output
15Hint
輸入數據多請使用scanf代替cin
題解:我連線性Dp都沒一次過嗎(哭了),先講下N*H*H的算法吧。(我一開始初始化有問題)
? ? ? ? ? ?第一層i先枚舉n個人,第二次枚舉n個人的身高j,第三層枚舉k,即第i-1個人的身高。
#include<iostream> #include<algorithm> #include<queue> #include<cmath> #include<cstring> #include<cstdlib> #include<cstdio> using namespace std; const int oo=0x3f3f3f3f; const int N=50005; int fun,n,c,a[N],dp[N][101]; int ans=oo; int main(){freopen("1685.in","r",stdin);freopen("1685.out","w",stdout);scanf("%d %d",&n,&c);memset(dp,0x3f,sizeof(dp));scanf("%d",&a[1]);for(int j=a[1];j<=100;j++){dp[1][j]=(j-a[1])*(j-a[1]);//cout<<dp[1][j]<<endl; }for(int i=2;i<=n;i++)scanf("%d",&a[i]);for(int i=2;i<=n;i++){//dp[i][a[i]]=0;for(int j=a[i];j<=100;j++){for(int k=a[i-1];k<=100;k++){fun=dp[i-1][k]+abs(j-k)*c+(a[i]-j)*(a[i]-j);dp[i][j]=min(dp[i][j],fun);} }}for(int i=0;i<=100;i++)ans=min(dp[n][i],ans);printf("%d\n",ans);return 0; }?
轉載于:https://www.cnblogs.com/wuhu-JJJ/p/11335014.html
總結
以上是生活随笔為你收集整理的【UESTC 594】我要长高的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 少儿德国奎尔鱼油(QÜELL FISH
- 下一篇: 更改列表的默认项标记的颜色、大小等样式的