C :动态编程,给定3个可能的操作
C++: Dynamic programming, given 3 possible operations
问题:所以问题是这样的:我有n个数字。对于长度为n的每个数字x,我可以执行3个操作:1。如果x是2个倍数,则将x除以2。2。如果x是3的倍数,则将其除以3,将其除以3。3。减去。1来自X。找到最小操作数量以使x = 0。
输入:第1行:n行2:n数字的数组x
输出:第1行:将X1减少到0的操作数量。
那么我应该怎么做?
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int N;
cin >> N;
for (int i = 0; i < N; i++){
int A, count = 0;
cin >> A;
while (A > 0){
if (A%2 == 0){
A /= 2;
count++;
}
else if (A%3 == 0){
A /= 3;
count++;
}
else{
A--;
count++;
}
}
cout << count << "n";
}
}
我当前想到的这个代码在某些情况下不起作用(这意味着我没有输出所需的解决方案,并且代码是工作代码),例如XI =10。-1,然后/2,然后/2 -1,因此是5个操作。但是,最佳是10 -1,/3,/3,然后-1,即4个操作。有人知道如何解决这个问题的解决方案?谢谢!任何帮助都将不胜感激!
您说了动态编程:
std::vector<int> v{0};
for (int i = 1; i != N + 1; ++i) {
v.push_back(v.back() + 1);
if (i % 2 == 0) {
v.back() = std::min(v.back(), v[i / 2] + 1);
}
if (i % 3 == 0) {
v.back() = std::min(v.back(), v[i / 3] + 1);
}
}
return v.back();
相关文章:
- MPI突然停止了对多个核心的操作
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 使用 XOR 操作仅使用 2 个指针反转链表
- 对多个序列运行操作
- 如何忽略测试 DoAll() 中的第一个操作
- 为什么对小于 4 个字节的整数类型的位操作会发生意外行为?
- 为多个 COM 操作初始化 COM
- 如何使用位操作在单个整数中编码和解码两个数字
- 在'string=string+s1'和"string+=s1"之间移动语义可以保存多少个复制操作?
- C++ 两个函数除了一行之外执行相同的操作
- 如何在多个函数中操作 ifstream 对象
- 如何在C 对向量的第二个元素上执行较低的操作
- 如何对 n 个字符串执行操作,然后在C++中打印它们
- C :动态编程,给定3个可能的操作
- C++为什么不可能将这两个操作合并在一行中?
- 在多个lambdas捕获的对象上操作
- 两个 UShorts 之间的操作在 VC2015 中给出了一个 int
- 如何在 [action-if-true] 中执行多个操作
- 图像操作2个图像之间的差异
- 如何操作两个向量,并将结果保存到另一个向量