已知字符'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;
}
标签:字符,int,问题,复制粘贴,操作,include,dp From: https://www.cnblogs.com/Kellen-Gram/p/18106565