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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

乌龟跑步(记忆化搜索)

發布時間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 乌龟跑步(记忆化搜索) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:https://ac.nowcoder.com/acm/problem/15294
來源:牛客網

題目描述
有一只烏龜,初始在0的位置向右跑。
這只烏龜會依次接到一串指令,指令T表示向后轉,指令F表示向前移動一個單位。烏龜不能忽視任何指令。
現在我們要修改其中正好n個指令(一個指令可以被改多次,一次修改定義為把某一個T變成F或把某一個F變成T)。
求這只烏龜在結束的時候離起點的最遠距離。(假設烏龜最后的位置為x,我們想要abs(x)最大,輸出最大的abs(x))
輸入描述:
第一行一個字符串c表示指令串。c只由F和T構成。
第二行一個整數n。
1 <= |c| <= 100, 1 <= n <= 50
輸出描述:
一個數字表示答案。
示例1
輸入
復制
FT
1
輸出
復制
2
示例2
輸入
復制
FFFTFFF
2
輸出
復制
6
很好的一道記憶化搜索的題目。感覺記憶化搜索比dp好理解一些。
dp[i][fz][pos][dec]代表著到了第i個指令,還有fz次的反轉機會,到了pos位置,方向是dec(0/1)。
具體解釋看代碼

#include<bits/stdc++.h> #define ll long long using namespace std;int dp[101][51][201][2]; string s; int ans; int n;inline void dfs(int i,int fz,int pos,int dec) {if(i==s.size())//到達了指令的最末端。{if(fz==0) ans=max(ans,abs(pos));//必須執行了n次反轉return ;}if(fz<0||dp[i][fz][pos+100][dec]) return ;//如果沒有反轉次數了,或者這種情況已經出現過了。dp[i][fz][pos+100][dec]=1;//這種情況標記為1。if(s[i]=='F'){dfs(i+1,fz-1,pos,-1*dec);//用一次反轉之后,方向變化,位置不變dfs(i+1,fz,pos+dec,dec);//不用反轉}else if(s[i]=='T'){dfs(i+1,fz-1,pos+dec,dec);//用了反轉之后,方向不變,位置變化dfs(i+1,fz,pos,dec*-1);//不要反轉} } int main() {cin>>s;cin>>n;memset(dp,0,sizeof(dp));ans=0;dfs(0,n,0,1);cout<<ans<<endl;return 0; }

努力加油a啊,(o)/~

總結

以上是生活随笔為你收集整理的乌龟跑步(记忆化搜索)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。