1. 程式人生 > >動態規劃--dp--2018年東北農業大學春季校賽J

動態規劃--dp--2018年東北農業大學春季校賽J

來源:牛客網

我國現在能源消耗非常嚴重,現在政府有這樣一個工作,每天早上都需要把一些路燈關掉,但是他們想讓在關閉的過程中所消耗的能源是最少的,負責路燈關閉的工作人員以1m/s的速度進行行走,假設關閉路燈的時候不需要花費任何的時間,請你編寫一個程式,計算在給定路燈位置和每個路燈的消耗能源的多少,求出當所有路燈關閉的時候所需要的最少能量

一開始,起點s處路燈一定可以關,其餘路燈位於s兩側,人不斷向左右走去關燈,保證了一個包含s的區間[ i , j ],使得路燈i到路燈j區間內的路燈一定是熄滅的。

即一開始路燈熄滅區間為[ s , s ],後來不斷向左向右擴大。

//dp[i][j][0]表示[路燈i,路燈j]內路燈全部熄滅,且站在i處時,的消耗掉最小能量


區間[i][j][0]是由[i + 1][j]從左邊i + 1處dp[i + 1][j][0])向左走一步達到i,或者是由[i + 1][j][1]從右邊j處(dp[i + 1][j][1])走到i

計算走的時間,乘除了區間[i + 1][j]已經熄滅的燈外,其他燈在這段時間內消耗的能量。

#include <cstdio>

#include <iostream>

#include <cstring>

usingnamespace std;

const int maxn = 1e3 + 5;

constintINF = 0X3f3f3f3f;

int

d[maxn],w[maxn];

int dp[maxn][maxn][2];//dp[i][j][0]表示[路燈i,路燈j]內路燈全部熄滅,且站在i處時,的消耗掉最小能量

int sum = 0;

int n,s;

int main()

{

    while (scanf("%d",&n) != EOF) {

        scanf("%d",&s);

        sum = 0;

        for (int i = 1; i <= n; i ++) {

            scanf("%d%d",&d[i],&w[i]);

            sum += w[i];

            w[i] += w[i - 1];

        }

        memset(dp, 0x3f, sizeof(dp));

        dp[s][s][0] = dp[s][s][1] = 0;

//遞推順序應該從s向2邊推

        for (int i = s; i >= 1; i --) {

            for (int j = s ; j <= n; j ++) {

                if(i == s && j == s) continue;

                dp[i][j][0] = min(dp[i + 1][j][0] + (d[i + 1] - d[i]) * (sum - w[j] + w[i]),

                                  dp[i + 1][j][1] + (d[j] - d[i]) * (sum - w[j] + w[i]));

                dp[i][j][1] = min(dp[i][j - 1][1] + (d[j] - d[j - 1]) * (sum - w[j - 1] + w[i - 1]),

                                  dp[i][j - 1][0] + (d[j] - d[i]) * (sum - w[j -1] + w[i - 1]));

            }

        }

        printf("%d\n",min(dp[1][n][0],dp[1][n][1]));

    }

return 0;

}


相關推薦

動態規劃--dp--2018東北農業大學春季J

來源:牛客網 我國現在能源消耗非常嚴重,現在政府有這樣一個工作,每天早上都需要把一些路燈關掉,但是他們想讓在關閉的過程中所消耗的能源是最少的,負責路燈關閉的工作人員以1m/s的速度進行行走,假設關閉路燈的時候不需要花費任何的時間,請你編寫一個程式,計算在給定路燈位置和每個

2018東北農業大學春季 題解

【題目連結】 寫在前面:從都到尾做了一下這場比賽,似乎好題都是原題,水題都是他們學校自己出的。原題在抄過來的過程中,很多題目的題面、資料範圍都出了問題,還有題目資料很水。建議以後這樣的比賽不要掛到外面來了,不然別人會罵你們學校不負責任的... ... 吐槽: 1. 牛客網題面上輸入順序寫

2018東北農業大學春季 K-why的數列(斐波那契數列迴圈節)

連結:https://www.nowcoder.com/acm/contest/93/K來源:牛客網題目描述 wyh學長特別喜歡斐波那契數列,F(0)=0,F(1)=1,F(n)=F(n-1)+F(n

2018東北農業大學春季 K wyh的數列

連結:點選開啟連結題目描述 wyh學長特別喜歡斐波那契數列,F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2) 一天他突發奇想,想求F(a^b)%c 輸入描述:輸入第一行一個整數T(1<=T<=100),代表測試組數 接下來

2018東北農業大學春季 B wyh的矩陣【規律】

題目連結 思路 先加入 中間的那行 和中間的那列 再減去 最中間那個數 因為它 加了兩次 然後逐行往下加 會發現是一個三角形 然後下面是一個對稱的三角形 注意一下 不要反覆加 就可以了

2018東北農業大學春季

【題目】 A wyh的曲線 10/51 未通過 學一下求曲線長度? B wyh的矩陣 461/1355 通過 規律題方便打表的先打表再推 C wyh的商機 12/31 未通過 離線LCA? D wyh的迷宮

2018東北農業大學春季 B題題解

#include<iostream> #include<algorithm> using namespace std; int main() { long long t,n;cin>>t; long long sum=0;

2018東北農業大學春季H題wyh的吃雞

題目描述 最近吃雞遊戲非常火,你們wyh學長也在玩這款遊戲,這款遊戲有一個非常重要的過程,就是要跑到安全區內,否則就會中毒持續消耗血量,我們這個問題簡化如下假設地圖為n*n的一個圖,圖中有且僅有一塊X的聯通快代表安全區域,有一個起點S代表縮圈的時候的起點,圖中C代表的是車(保

2018東北農業大學春季:L-wyh的天鵝(Treap)

題意:插入元素,刪除元素,查詢第K大。題解:Treap。#include <bits/stdc++.h> using namespace std; #define Lc (o -> Ch[0]) #define Rc (o -> Ch[1]) #de

2018東北農業大學春季 K、wyh的數列

題意:  斐波拉契數列f[0]=0、f[1]=1 , f[n]=f[n-1]+f[n-2](n>=2);求f[a^b]%c.(a、b<=2^64、2<=c<=1000)***因為

2018東北農業大學春季 B

連結:https://www.nowcoder.com/acm/contest/93/B來源:牛客網時間限制:C/C++ 1秒,其他語言2秒空間限制:C/C++ 262144K,其他語言524288K 64bit IO Format: %lld題目描述 給你一個n*n矩陣,

2018東北農業大學春季D wyh的迷宮

給你一個n*m的迷宮,這個迷宮中有以下幾個標識: s代表起點 t代表終點 x代表障礙物 .代表空地 現在你們涵哥想知道能不能從起點走到終點不碰到障礙物(只能上下左右進行移動,並且不能移動到已經移動過的點)。 輸入描述:輸入第一行一個整數T(1<=T<=1

2018東北農業大學春季 B wyh的矩陣 【規律】

連結:https://www.nowcoder.com/acm/contest/93/B #include<bits/stdc++.h> using namespace std; #define ll long long int main() { int

2018東北農業大學春季 L-wyh 【線段樹】

題目描述  你們wyh學長小時候住在河邊,因為周圍的生態環境非常好,所以經常會有天鵝浮在湖面上,每隻天鵝都長得不一樣,它們偶爾排成一排,偶爾分散開,偶爾也會去其他河畔,wyh學長為了統計它們的個數,編了一個程式賦予它們一個“萌”值,但是這些天鵝很不聽話,一會兒會從別的地方游

2018東北農業大學春季 H why的吃雞

連結:點選開啟連結題目描述 最近吃雞遊戲非常火,你們wyh學長也在玩這款遊戲,這款遊戲有一個非常重要的過程,就是要跑到安全區內,否則就會中毒持續消耗血量,我們這個問題簡化如下 假設地圖為n*n的一個圖,圖中有且僅有一塊X的聯通快代表安全區域,有一個起點S代表縮圈的時

2018東北農業大學春季-A:wyh的曲線(Simpson)

時間限制:C/C++ 1秒,其他語言2秒空間限制:C/C++ 262144K,其他語言524288K64bit IO Format: %lld題目描述給你三組數列,分別為現在給你一個式子:然後我們可以將

2018東北農業大學春季——why的數字

題目描述 wyh學長十分鐘愛數字‘7’,他想知道每一個數字中有多少個數字‘7’ 輸入描述: 輸入第一行一個整數T(1<=T<=10) 接下來有T組測試資料,對於每組測試資料,輸

東北農業大學春季——wyh的數字(輸出各位上數字)

輸入描述: 輸入第一行一個整數T(1<=T<=10) 接下來有T組測試資料,對於每組測試資料,輸入一個整數n(1<=n<=10000000000) 輸出描述: 對於每組測試資料

2018 浙江省大學生程式設計競賽 D.Sequence Swapping(動態規劃dp,思維邏輯)

轉載出處:https://blog.csdn.net/i11000/article/details/80209662 #include<cstdio> #include<cstring> #include<iostream> #include<queue

動態規劃 DP

code tchar getch spa div 發現 style logs print 動態規劃 DP 我們用f[ i ] 表示從 i 點出發到達終點的最多能休息的時間 然後我們發現 狀態轉移方程f[ i ] = f[ i+1 ] +1 ; 當