【发布时间】:2015-10-21 01:45:26
【问题描述】:
我在比赛的某个地方发现了这个问题,但还没有想出解决方案。
我可以在另一个地方“选择”、“复制”、“插入”和“移动”一个数字 屏幕上。最初我有一个大小为 1x1 的矩形。最少的是什么 我必须做的这些操作的数量来构建另一个 矩形,大小为 AxB。
这是我的错误代码:
#include <iostream>
#include <cmath>
#define size 1002
using namespace std;
int main()
{
int painta[size];
int paintb[size];
int i,j,a,b,temp;
cin >> a >> b;
if (a>b)
{
temp=a;
a=b;
b=temp;
}
painta[1]=4;
for (i=2; i<=a; i++)
painta[i]=painta[i-1]+2;
for (i=2; i<=a; i++)
{
painta[2*i]=min(painta[i]+4,painta[2*i]);
for (j=3*i; j<=a; j+=i)
{
painta[j]=min(painta[j-i]+2,painta[j]);
}
}
paintb[1]=painta[a];
paintb[2]=paintb[1]+4;
for (i=3; i<=b; i++)
paintb[i]=paintb[i-1]+2;
for (i=2; i<=b; i++)
{
paintb[2*i] = min(paintb[i]+4,paintb[2*i]);
for (j=3*i; j<=b; j+=i)
{
paintb[j]=min(paintb[j-i]+2,paintb[j]);
}
}
cout << paintb[b] << endl;
return 0;
}
【问题讨论】:
-
请用简单的英语解释您的算法,以传达您认为它应该起作用的直觉。另外,请注明问题的根源,以便我们向自己保证这不是现场比赛的一部分,以便我们有机会尝试自己的解决方案
-
@Niklas B 我已经编辑了问题。
-
什么是“移动”操作?
-
试试测试用例
1 2。也可以考虑1 5到1 9。
标签: c++ algorithm dynamic-programming