复制粘贴问题

已知字符'A',给定输入数量n,怎么用最少的操作数实现得到数量n的字符'A'

操作有CtrlA,CtrlC,CtrlV,CtrlS

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

int minOperations(int n) {
    if (n == 1) return 0; // 如果已经有一个'A',则不需要操作
    vector<int> dp(n + 1, INT_MAX); // 初始化dp数组,dp[i]表示生成i个'A'的最小操作次数
    dp[1] = 0; // 已经有一个'A'

    for (int i = 2; i <= n; ++i) {
        // 对于每个i,尝试通过复制粘贴来生成
        for (int j = 1; j < i; ++j) {
            if (i % j == 0) {
                // 如果i能被j整除,意味着我们可以通过复制j个'A'然后粘贴(i/j - 1)次来得到i个'A'
                // 操作次数为:dp[j](得到j个'A'的操作次数) + 2(全选和复制) + (i/j - 1)(粘贴次数)
                dp[i] = min(dp[i], dp[j] + 2 + i / j - 1);
            }
        }
    }

    return dp[n];
}

int main() {
    int n;
    cin >> n; // 从用户获取n
    cout << "Minimum operations to get " << n << " 'A's: " << minOperations(n) << endl;
    return 0;
}

 

posted @ 2024-03-31 12:07  Kellen_Gram  阅读(34)  评论(0)    收藏  举报