<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [POI 2004] MOS

      一道很有意思的貪心題,似乎noi導刊上有?記不太清了,反正是做出來了。

      題意

      有一個橋,一個火把,一堆人。

      這對人要過橋,過橋有一些條件。

      • 需要過橋的人有火把

      • 不可同時過兩個以上

      每次過橋的花費時間是兩人中花費最高的那位。

      詢問最小的過橋花費。

      注意,火把是必須有人帶回的,這個火把不能憑空傳送。

      解法

      這個其實并不難,我們發(fā)現(xiàn) \(n\) 為 1, 2, 3 時的都很簡單,我們從簡單處入手。

      對于 \(n=1\)

      對于 \(n=2\)

      對于 \(n=3\) 我們讓最快的人分別帶人過去再返回送火把,答案是所有人的花費之和。

      但是對于 \(n>3\) 這個并不一定是正確的策略,我們但從這一次進行考慮這個確實是最優(yōu)的,但是我們不能排除因為順序而導致的不同。

      比如有兩個接近無限的數(shù),這兩個明顯一起過更好,如果使用最快一個一個接明顯不妥當。

      所以我們多了一種策略,讓最慢和次慢同行,顯然最慢和次次慢更劣。

      具體來講第二種策略,我們讓最快和次快先過,最快回來送火把,最慢和次慢過去,次快回來送火把。

      這兩種策略我們并不知道什么時候使用,所以直接 dp。

      代碼

      #include <bits/stdc++.h>
      using namespace std;
      const int MN=1e6+116;
      int n, a[MN], dp[MN];
      int main(){
      	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
      	cin>>n; for(int i=1; i<=n; ++i) cin>>a[i];
      	dp[n]=a[n]+a[1];
      	if(n==1){
      		cout<<a[1]<<'\n';
      		return 0;
      	}
      	for(int i=n-1; i; --i)
      		dp[i]=min(a[i]+a[1]+dp[i+1],a[i+1]+a[2]+a[2]+a[1]+dp[i+2]);
      	cout<<dp[3]+a[2]<<'\n';
      	return 0;
      }
      
      posted @ 2025-09-21 19:37  BaiBaiShaFeng  閱讀(4)  評論(0)    收藏  舉報
      Sakana Widget右下角定位
      主站蜘蛛池模板: 无码日韩人妻精品久久蜜桃| 午夜DY888国产精品影院| 草草浮力影院| 亚洲性日韩一区二区三区| 日韩加勒比一本无码精品| 成人午夜视频一区二区无码| 国产精品午夜无码AV天美传媒 | 鸡泽县| 亚洲欧洲国产综合aⅴ无码| 国内不卡不区二区三区| 国产乱码一区二区三区| 亚洲av色一区二区三区| 日本无人区一区二区三区| 精品少妇爆乳无码aⅴ区| 亚洲中文字幕第二十三页| 精品久久精品久久精品久久| 国产偷窥熟女精品视频大全| 日韩V欧美V中文在线| 亚洲日本va午夜中文字幕久久| 国产精品推荐手机在线| 亚洲午夜爱爱香蕉片| 久久91精品牛牛| 欧美一级黄色影院| 国产精品成人久久电影| 久久精品国产免费观看频道| 亚洲区色欧美另类图片| 欧洲熟妇色xxxx欧美老妇免费| 中文字幕有码在线第十页| 久久精品国产中文字幕| 88国产精品视频一区二区三区| 自拍偷在线精品自拍偷99| 国产精品视频一区不卡| 成人免费无遮挡无码黄漫视频| 亚洲欧洲日产国无高清码图片| 国产成人AV在线免播放观看新 | 久久久久久免费一区二区三区| 国产成人亚洲欧美二区综合| 国内熟女中文字幕第一页| 国产国产久热这里只有精品| 亚洲人妻精品中文字幕| 国产精品黄在线观看免费|