uestc oj 1690 最少花費

2021-06-14 19:30:56 字數 791 閱讀 5223

最少花費

其實這個題目跟我要長高很像的,都是需要用單調佇列優化dp來解決的

只是這個題目多了乙個條件山與山之間的高度差不能超過k

狀態規劃方程  

dp[i][x]=min(dp[i-1][y]+a*abs(x-y)+(hill[i]-x)^2)

也是分高於前一座山還是低於前一座山來進行計算的

只是在佇列node裡面要加乙個index來記錄這個山是有多高的 value用來記錄  單調統計量

每一次dp更新的時候  頭部與尾部的index要進行比較的 如果超過k的話就head++

其餘的就是普通dp的

#include#include#include#define inf 0x3fffffff

using namespace std;

int t,n,k,a,i,j,maxh;

int head,tail,temp;

int dp[1005][1005];

int hill[1005];

struct node

que[1005];

int main()

}//當比前一座上矮時 max(0,x-k)<= y <=x

head = tail = 0;

for(j=maxh;j>=0;j--)

else}}

int ans = inf;

for(i=0;i<=maxh;i++)

printf("%d\n",ans);

}return 0;

}

uestc oj 1685 我要長高

這是一道動態規劃的dp問題 但是明顯需要o n 3 的時間複雜度 顯然需要進行優化,並且有明顯的可以進行單調佇列優化的特徵,在本次確定高度之後,總能在前一次當中尋找到乙個最優解。最優解當然是由上一次的積累量 本次積累量 其中上一次的積累量與本次的積累量之間無關聯 就是說dp i 1 k 的積累量只是...

169 多數元素

解題思路 1.將陣列從小到大排序 2.第nums.length 2處的元素就是我們要求的元素,直接返回nums nums.length 2 即可 實現 class solution 解題思路 1.變數val,初始值為nums 0 記錄當前的值,計數器cnt,記錄當前元素累計出現的情況,初始值為1 2...

169 多數元素

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 分析 解法一 我們可以先排序,然後輸出在陣列 現次數大於...