日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[CODEVS1258]关路灯

發(fā)布時(shí)間:2024/4/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [CODEVS1258]关路灯 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?題目描述?Description

多瑞卡得到了一份有趣而高薪的工作。每天早晨他必須關(guān)掉他所在村莊的街燈。所有的街燈都被設(shè)置在一條直路的同一側(cè)。

多瑞卡每晚到早晨5點(diǎn)鐘都在晚會(huì)上,然后他開(kāi)始關(guān)燈。開(kāi)始時(shí),他站在某一盞路燈的旁邊。

每盞燈都有一個(gè)給定功率的電燈泡,因?yàn)槎喽丝ㄓ兄杂X(jué)的節(jié)能意識(shí),他希望在耗能總數(shù)最少的情況下將所有的燈關(guān)掉。

多端卡因?yàn)樘哿?#xff0c;所以只能以1m/s的速度行走。關(guān)燈不需要花費(fèi)額外的時(shí)間,因?yàn)楫?dāng)他通過(guò)時(shí)就能將燈關(guān)掉。

編寫(xiě)程序,計(jì)算在給定路燈設(shè)置,燈泡功率以及多端卡的起始位置的情況下關(guān)掉所有的燈需耗費(fèi)的最小能量。

輸入描述?Input Description

輸入文件的第一行包含一個(gè)整數(shù)N,2≤N≤1000,表示該村莊路燈的數(shù)量。

第二行包含一個(gè)整數(shù)V,1≤V≤N,表示多瑞卡開(kāi)始關(guān)燈的路燈號(hào)碼。

接下來(lái)的N行中,每行包含兩個(gè)用空格隔開(kāi)的整數(shù)D和W,用來(lái)描述每盞燈的參數(shù),其中0≤D≤1000,0≤W≤1000。D表示該路燈與村莊開(kāi)始處的距離(用米為單位來(lái)表示),W表示燈泡的功率,即在每秒種該燈泡所消耗的能量數(shù)。路燈是按順序給定的。

輸出描述?Output Description

輸出文件的第一行即唯一的一行應(yīng)包含一個(gè)整數(shù),即消耗能量之和的最小值。注意結(jié)果小超過(guò)1,000,000,000。

樣例輸入?Sample Input

4

3

2?2

5?8

6?1

8?7

樣例輸出?Sample Output

56

思路

對(duì)于小數(shù)據(jù)來(lái)說(shuō),爆搜可以過(guò),n<=50,然而對(duì)于大的數(shù)據(jù),當(dāng)n<=1000時(shí),只能過(guò)7個(gè)點(diǎn)。

設(shè)f[i,j,k](k=1或2)表示已經(jīng)關(guān)過(guò)的MM區(qū)間為[i,j],k=1表示當(dāng)前在左端點(diǎn)i位置,k=2表示當(dāng)前在右端點(diǎn)j位置。

f[i,j,0]=min{ f[i+1,j,1] + (w[i] + (w[n] - w[j]))*(d[i+1] - d[i]),f[i+1,j,2] + (w[i]+ (w[n] - w[j]))*(d[i+1] - d[i]) }f[i,j,2]=min{ f[i,j-1,1] + (w[i-1] + (w[n] - w[j-1]))*(d[j] - d[i]),f[i,j-1,2] + (w[i-1] + (w[n] - w[j-1]))*(d[j] - d[j-1]) }初始狀態(tài):f[s,s,1]=s[s,s,2]=0目標(biāo)狀態(tài):min{ f[1,n,1] , f[1,n,2] }時(shí)間復(fù)雜度:O(n^2)DFS varn,c,ans,total:longint;dis,w:array[0..60]of longint;f:array[0..60]of boolean;procedure init; beginassign(input,'power.in');assign(output,'power.out');reset(input);rewrite(output); end;procedure terminate; beginclose(input); close(output);halt; end;procedure dfs(t,tot,total,t1:longint); vari:longint; beginfor i:=t-1 downto 1 doif f[i] thenbeginif tot+(dis[t]-dis[i])*(total-w[t])<ans thenbeginf[i]:=false;dfs(i,tot+(dis[t]-dis[i])*(total-w[t]),total-w[t],t1+1);f[i]:=true;break;end;end;for i:=t+1 to n doif f[i] thenbeginif tot+(dis[i]-dis[t])*(total-w[t])<ans thenbeginf[i]:=false;dfs(i,tot+(dis[i]-dis[t])*(total-w[t]),total-w[t],t1+1);f[i]:=true;break;end;end;if t1=n thenif tot<ans thenbeginans:=tot;exit;end; end;procedure main; vari:longint; beginreadln(n,c);total:=0;for i:=1 to n dobeginreadln(dis[i],w[i]);f[i]:=true;total:=total+w[i];end;ans:=maxlongint;f[c]:=false;dfs(c,0,total,1);writeln(ans); end;begininit;main;terminate; end. View Code

?

DP

program CloseTheLight; uses math; var n,c,i,p,j,k,v1,a:longint;v,s:array[0..1000] of longint;f:array[0..1000,0..1000,0..1] of longint; beginread(n,c);for i:=1 to n dobeginread(v[i],a);s[i]:=s[i-1]+a;end;filldword(f,sizeof(f) div 4,maxlongint);f[c,c,1]:=0;f[c,c,0]:=0;for p:=0 to n-1 dofor i:=1 to n-p dobeginj:=i+p;for k:=0 to 1 dobeginif k=0 then v1:=i else v1:=j;if f[i,j,k]<maxlongint thenbeginif i>0 then f[i-1,j,0]:=min(f[i-1,j,0],f[i,j,k]+(s[i-1]+s[n]-s[j])*(v[v1]-v[i-1]));if j<n then f[i,j+1,1]:=min(f[i,j+1,1],f[i,j,k]+(s[i-1]+s[n]-s[j])*(v[j+1]-v[v1]));end;end;end;writeln(min(f[1,n,0],f[1,n,1])); end. View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/yangqingli/p/4792874.html

總結(jié)

以上是生活随笔為你收集整理的[CODEVS1258]关路灯的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。