我要長高

來源:互聯網
上載者:User

http://www.acm.uestc.edu.cn/problem.php?pid=1685

單調隊列最佳化DP

#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <queue>#include <algorithm>#include <vector>#include <cstring>#include <stack>#include <cctype>#include <utility>   #include <map>#include <string>  #include <climits> #include <set>#include <string>    #include <sstream>#include <utility>   #include <ctime>#include <bitset>using std::priority_queue;using std::vector;using std::swap;using std::stack;using std::sort;using std::max;using std::min;using std::pair;using std::map;using std::string;using std::cin;using std::cout;using std::set;using std::queue;using std::string;using std::stringstream;using std::make_pair;using std::getline;using std::greater;using std::endl;using std::multimap;using std::deque;using std::unique;using std::lower_bound;using std::random_shuffle;using std::bitset;using std::upper_bound;typedef long long LL;typedef unsigned long long ULL;typedef pair<int, int> PAIR;typedef multimap<int, int> MMAP;typedef LL TY;typedef long double LF;const int MAXN(200010);const int MAXM(100010);const int MAXE(100010);const int MAXK(6);const int HSIZE(31313);const int SIGMA_SIZE(26);const int MAXH(19);const int INFI((INT_MAX-1) >> 1);const ULL BASE(31);const LL LIM(10000000);const int INV(-10000);const int MOD(20100403);const double EPS(1e-7);const LF PI(acos(-1.0));template<typename T> void checkmax(T &a, T b){if(b > a) a = b;}template<typename T> void checkmin(T &a, T b){if(b < a) a = b;}template<typename T> T ABS(const T &a){return a < 0? -a: a;}int value[110];int que[110];int front, back;int table[2][110];int pow2[110];int main(){int N, C;for(int i = 0; i <= 100; ++i)pow2[i] = i*i;while(~scanf("%d%d", &N, &C)){int cur = 0, last = 1;int h1, h2;scanf("%d", &h1);for(int i = 1; i < h1; ++i)table[last][i] = INFI;for(int i = h1; i <= 100; ++i)table[last][i] = pow2[i-h1];for(int i = 1; i < N; ++i){scanf("%d", &h2);for(int j = 1; j <= 100; ++j)table[cur][j] = INFI;front = 0;back = -1;for(int j = h1; j < h2; ++j){int tv = table[last][j]-C*j;while(front <= back && tv <= value[back]) --back;value[++back] = tv;}for(int j = h2; j <= 100; ++j){int tv = table[last][j]-C*j;while(front <= back && tv <= value[back]) --back;value[++back] = tv;checkmin(table[cur][j], pow2[j-h2]+C*j+value[front]);}front = 0;back = -1;for(int j = 100; j >= h2; --j){int tv = table[last][j]+C*j;while(front <= back && tv <= value[back]) --back;value[++back] = tv;checkmin(table[cur][j], pow2[j-h2]-C*j+value[front]);}h1 = h2;swap(cur, last);}int ans = INFI;for(int i = h1; i <= 100; ++i)checkmin(ans, table[last][i]);printf("%d\n", ans);}return 0;}     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.