第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

2013 藍橋杯 省賽B組 翻硬幣(洛谷P8597題) 從暴力BFS到貪心算法的優(yōu)化之路

一、问题背景与理解

洛谷P8597是一道经典的翻硬币问题,题目描述如下:给定两个由''和'o'组成的字符串s1和s2,分别表示初始状态和目标状态。每次操作可以选择任意位置开始翻转连续的k个硬币(''变'o','o'变'*')。要求计算出从初始状态变为目标状态所需的最少操作次数。

这个问题看似简单,但蕴含着重要的算法思想转变过程。作为新手,理解这个问题从暴力解法到最优解法的演进过程,对培养算法思维非常有帮助。

https://img1.sycdn.imooc.com/dc44c2680843ad5709470780.jpg

二、暴力BFS解法分析

int minOperations(string s, int k) {
    int n = s.length();
    int target = stoi(s, nullptr, 2); // 字符串转二进制数
    queue<int> q; // BFS队列
    vector<bool> visited(1<<n, false); // 状态访问标记
    
    q.push(0); // 初始全0状态
    visited[0] = true;
    int steps = 0;
    
    while (!q.empty()) {
        int size = q.size();
        while (size--) {
            int curr = q.front();
            q.pop();
            if (curr == target) return steps;
            
            for (int i=0; i<=n-k; ++i) {
                int mask = (1<<k)-1 << i;
                int next = curr ^ mask;
                
                if (!visited[next]) {
                    visited[next] = true;
                    q.push(next);
                }
            }
        }
        steps++;
    }
    return -1;
}


三、贪心算法优化

#include <iostream>
#include <string>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    string s1, s2;
    cin >> s1 >> s2;
    int cnt = 0;
    
    for (int i = 0; i < s1.size() - 1; ++i) {
        if (s1[i] != s2[i]) {
            // 翻转当前和下一个硬币
            s2[i] = s1[i];
            s2[i+1] = (s2[i+1] == 'o') ? '*' : 'o';
            cnt++;
        }
    }
    cout << cnt;
    return 0;
}

原文:蓝桥杯 2013 省B 洛谷P8597题翻硬币 从暴力BFS到贪心算法的优化之路


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消