http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1674
刷屏
Time Limit:1000MS Memory Limit:32768K
Description:
小y在群里跟人刷屏,他想知道怎样刷屏是最快最节省操作的。而他又很挑剔,想输出多少字符就只能输出多少。
刷屏的操作包括以下,每项算一次操作:
1.输入一个字符。
2.全选所有已输入的字符。
3.复制
4.粘贴(全选后的初次粘贴只是覆盖了原来的内容,因为小y没有鼠标去取消全选状态……)。
Input:
首先一个整数cas,表示接下来有cas个数据。 每个数据占一行,为一个整数n,0<n<5000,表示小y想要输入的字符数。
Output:
每个数据输出一行,表示输出n个字符最少需要的操作数。
Sample Input:
3
1
9
99
Sample Output:
1
8
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int ans,n;
const int INF=1000000;
int dp[5002];
void cutroad()
{
for(int i=1;i<=5000;i++)dp[i]=INF;
for(int i=1;i<=8;i++)dp[i]=i;
for(int i=9;i<=5000;i++)
{
dp[i]=dp[i-1]+1;
for(int k=1;k<i;k++)
{
if(i%k==0)dp[i]=min(dp[i],dp[i/k]+k+2);
}
}
}
int main()
{
int cas;
cutroad();
cin>>cas;
while(cas--)
{
cin>>n;
cout<<dp[n]<<endl;
}
}