动态规划(线性类)--ones 唯“一”运算

来源:互联网 发布:mac鼠标能点右键吗 编辑:程序博客网 时间:2024/06/08 05:22

【动态规划】ones 唯“一”运算

Time Limit:300000MS  Memory Limit:65536K

Description

给定n, 计算只用1, *, +, (, ) 表示n所需要的最少的1的个数 
例子: 
3 = 1 + 1 + 1 
6 = (1 + 1 + 1) * (1 + 1) 
20 = (1 + 1 + 1 + 1 + 1) * (1 + 1) * (1 + 1)

Input

输入为一个数n

Output

输出所需要的最少的1的个数

Sample Input

20

Sample Output

9

看完这个时间限制,我也是醉了,立马想到了暴力枚举

代码交上去才发现自己太天真,超时了

没办法,只能动态规划了


var n,i,j,k:longint;    opt:array[0..1000001]of integer;begin  readln(n);  for i:=1 to n do  opt[i]:=100;  opt[0]:=0;  opt[1]:=1;  for i:=2 to n do  begin    for j:=1 to trunc(sqrt(i)) do    begin       if opt[j]+opt[i-j]<opt[i] then       opt[i]:=opt[j]+opt[i-j];end;    for k:=2 to trunc(sqrt(i)) do    begin       if opt[k]+opt[i div k]+opt[i mod k]<opt[i]then       opt[i]:=opt[k]+opt[i div k]+opt[i mod k];end;  end;  writeln(opt[n]);end.      


0 0
原创粉丝点击