最少花費
其實這個題目跟我要長高很像的,都是需要用單調佇列優化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 分析 解法一 我們可以先排序,然後輸出在陣列 現次數大於...