zjut1674刷屏

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;
	}
}
posted on 2011-05-06 09:55  4.5.6  阅读(259)  评论(0编辑  收藏  举报