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; } }