NYOJ 304 節能 記憶化搜尋

2021-07-11 07:34:35 字數 1723 閱讀 8380

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:5 描述

dr.kong設計的機械人卡多越來越聰明。最近市政公司交給卡多

一項任務,每天早晨5:00開始,它負責關掉zk大道右側上所有的路燈。

卡多每到

早晨5:00準會在zk大道上某盞路燈的旁邊,然後他開始關燈。每盞燈都有一定的功率,

機械人卡多

有著自覺的節能意識,它希望在關燈期間,zk大道右側上所有路燈的耗電量總數是最少的。

機械人卡多

以1m/s的速度行走。假設關燈動作不需要花費額外的時間,因為當它通過某盞路燈時就順手將燈關掉。

請你編寫程式,計算在給定路燈設定,燈泡功率以及

機械人卡多

的起始位置的情況下,

卡多關燈期間,zk大道上所有燈耗費的最小能量。

輸入

有多組測試資料,以eof為輸入結束的標誌

每組測試資料第一行: n 表示zk大道右側路燈的數量 (2≤ n ≤ 1000) 

第二行: v 表示機械人卡多開始關燈的路燈號碼。 (1≤v≤n)

接下來的n行中,每行包含兩個用空格隔開的整數d和w,用來描述每盞燈的引數

d表示該路燈與zk大道起點的距離 (用公尺為單位來表示),

w表示燈泡的功率,即每秒該燈泡所消耗的能量數。路燈是按順序給定的。

( 0≤d≤1000, 0≤w≤1000 )

輸出輸出乙個整數,即消耗能量之和的最小值。注意結果小於200,000,000

樣例輸入

4 

32 2

5 86 1

8 7

樣例輸出

56

**第四屆河南省程式設計大賽

//dp[i][j][0]=min(dp[i+1][j][0]+[i+1,j]區間外在從i+1到i 期間所消耗能量,dp[i+1][j][1]+[i+1,j]區間外在從j到i期間所消耗能量)

//dp[i][j][1]=min(dp[i][j-1][0]+[i,j-1]區間外在從i到j 期間所消耗能量,dp[i][j-1][1]+[i,j-1]區間外在從j-1到j期間所消耗能量)

//初始化i從1到v-1 dp[i][v][0],在根據其求得dp[i][v][1],i從v+1到n dp[v][i][1],在根據其求得dp[v][i][0]

//之後只會實現用遞迴記憶化搜尋求最終結果,直接窮竭搜尋tle

#include #include#include#include#define maxn 1010

using namespace std;

int d[maxn],w[maxn];

int dp[maxn][maxn][2];

int r[maxn][maxn],tem;

int fun(int i,int j,int k)

int main()

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

memset(r,0,sizeof(r));

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

}for(int i=v-1;i>=0;--i)

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

int ans=min(fun(1,n,0),fun(1,n,1));

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

}return 0;

}

NYOJ 10 Skiing 記憶化搜尋

題目的意思是 給你乙個n m的矩陣 讓你從中找出一條最長的遞減序列 能走四個方向 上下左右 這道題需要用到 記憶化搜尋 普通搜尋會超時 記憶化搜尋就是在原本記錄該點是否到過的陣列中儲存一些其他資訊 比如上一次到這個點的序列長度是多少 或者直接在這個陣列中儲存答案 兩種都可以 include incl...

NYOJ 10 skiing 記憶化搜尋)

想著藍橋杯還有20天左右就開始了,計畫是把歷年真題都敲一遍,再把之前寫過的nyoj的題目重新的複習一下,並且就是把所有寫過的題重新的整理到部落格上面來,這是開始的第一篇部落格,接下來我會好好的整理好我的部落格,養成乙個良好的 風格,跟複習習慣,一步一步的成長,慢慢的掙扎,直到有一天,可以以長劍嘯天 ...

NYOJ 16 矩形巢狀 記憶化搜尋

思路 dag模型!先建圖,如果第i 個矩形 能套在 第j 個矩形裡面的話,那麼 就可以建立乙個有向邊,i j,最後我們可以把這個問題轉換為 求這個圖中的最長路的長度!dfs記憶化搜尋,和前幾篇那個樹形dp 有很大的相似之處,他們的思想是一樣的,就是先遞迴,在回溯的過程中狀態轉移!那乙個題目 在遞迴過...