数据填充

Description
ORZ公司的软件研发部门正在测试一个新产品接受极端数据的能力。因此,公司希望你能够写一段长度为N的极端混乱的数据,帮助他们完成测试。

当你打开计算机准备随机生成数据时,编译器却发生错误,告诉你随机函数不存在!因此,你只好手动完成任务。但你比较懒,所以希望使用最少的按键次数来完成任务。

为了简化问题,我们规定合法操作包含以下两种:

(1)再添加一个字符。

(2)利用ctrl+A,ctrl+C,ctrl+V(一组快捷键视作一次按键,上面的按键视为三次)来复制粘贴。完成后还要按一下End来进行下一个操作。

注意,在执行过操作(2)后不一定要马上按下end,可以再按下ctrl+V粘贴若干次。但要再次复制(再次复制可以增长剪贴板中数据长度)或是输入一个字符时必须要按下End。

Input
一个数字N,表示你需要提供长度为N的数据。注意:不能多也不能少。

Output
一个数字,表示完成任务所需的最少步骤数。

Sample Input
150
Sample Output
20
HINT
对于100%的数据,0≤N≤20000


考虑使用递推方法.
要加强递推的练习.

#include<iostream>
#include<string.h>
using namespace std;
int f[1000000];
int main()
{
    memset(f, 127, sizeof(f));
    int n;
    cin >> n;
    f[0] = 0;
    for(int i = 1; i <= n; i ++)
    {
        f[i] = min(f[i], f[i - 1] + 1);
        for(int j = 2; i * j <= n; j ++)
            f[i * j] = min(f[i * j], f[i] + 2 + j);
    }
    cout << f[n];
}
原文地址:https://www.cnblogs.com/ZeonfaiHo/p/6402870.html