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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字节--房间传送门

發(fā)布時間:2024/4/11 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字节--房间传送门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

字節(jié)–房間傳送門

文章目錄

  • 字節(jié)--房間傳送門
    • 一、題目描述
    • 二、分析
    • 三、代碼

一、題目描述

存在n+1個房間,每個房間依次為房間1 2 3…i,每個房間都存在一個傳送門,i房間的傳送門可以把人傳送到房間pi(1<=pi<=i),現(xiàn)在路人甲從房間1開始出發(fā)(當前房間1即第一次訪問),每次移動他有兩種移動策略:

  • A. 如果訪問過當前房間 i 偶數(shù)次,那么下一次移動到房間i+1;
  • B. 如果訪問過當前房間 i 奇數(shù)次,那么移動到房間pi;

現(xiàn)在路人甲想知道移動到房間n+1一共需要多少次移動;

  • 輸入描述:
第一行包括一個數(shù)字n(30%數(shù)據(jù)1<=n<=100100%數(shù)據(jù) 1<=n<=1000),表示房間的數(shù)量,接下來一行存在n個數(shù)字 pi(1<=pi<=i), pi表示從房間i可以傳送到房間pi。
  • 輸出描述:
輸出一行數(shù)字,表示最終移動的次數(shù),最終結果需要對1000000007 (10e9?+?7) 取模。輸入例子1: 2 1 2輸出例子1: 4例子說明1: 開始從房間1 只訪問一次(訪問1次房間1,即基數(shù)次)所以只能跳到p1,即:房間1(訪問次數(shù)+1,即訪問房間1的次數(shù)為2,偶數(shù)次), 之后采用策略A跳到房間2,房間2(訪問1次房間2,即基數(shù)次)這時訪問了一次因此采用策略B跳到房間2(房間2訪問次數(shù)+1,即偶數(shù)),之后采用策略A跳到房間3,因此到達房間3需要 4 步操作。

二、分析

  • 仔細分析 1<=pi<=i 知道用動態(tài)規(guī)劃做。
  • 因為pi的取值范圍為1到i,說明在走到i房間時,如果需要傳送,那么傳送的房間位置要么就在當前房間,要么就在當前房間位置之前的房間
  • 因為傳送只會后退,前進的唯一方式是偶數(shù)次到達某個房間后,+1到達下一個房間,不能跳躍
  • 所以如果成功到達i門,那么i門前面所有門都走過并且經(jīng)過偶數(shù)次(偶數(shù)次并不是2次)(反正法也可以證明)
  • 如果當大imen,那么此時i門前面的所有門肯定是已經(jīng)到達偶數(shù)次了
  • 如果到達i門需要移動的次數(shù)為dp[i],那么dp[i] = dp[i - 1] + 第二次到達i - 1 + 1;
  • 意思就是到達i門的移動次數(shù)等于到達i - 1門的移動次數(shù) + 1;那么到達i - 1門的移動次數(shù)又怎么計算呢?到達i - 1門的移動次數(shù)就等于dp[i - 1] + 第二次到達i - 1的次數(shù)
  • 第一次到達i-1門后再走一步會回到p[i-1],此時p[i-1]門到達奇數(shù)次,其他所有門到達偶數(shù)次
  • 這和第一次到達p[i-1]門的情況完全相同,所以從p[i-1]門回到i-1門,需要dp[i-1]-dp[p[i-1]]
  • 所以dp[i] = dp[i-1] + dp[i-1] - dp[p[i-1]] + 1 + 1 ==》dp[i] = 2 * dp[i-1] - dp[p[i-1]] + 2

三、代碼

#include <iostream> using namespace std;long long p[1001], dp[1001], n; const long long mod = 1e9?+?7;int main () {cin >> n;for (int i = 1; i<= n; ++i) cin >> p[i];for (int i = 2; i <= n + 1; ++i)dp[i] = (2 * dp[i - 1] - dp[p[i - 1]] + 2) % mod;cout << (dp[n + 1] < 0 ? dp[n + 1] + mod : dp[n + 1]);return 0; }

總結

以上是生活随笔為你收集整理的字节--房间传送门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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