nyoj 708 ones


如果i是素数,则dp[i]=dp[i-1]+1;
否则,dp[i]=dp[j]+dp[i/j]; 
#include<stdio.h>
#include<algorithm>
using namespace std;


int main(){
	int n,dp[10005]={0,1,2,3,4,5};
	for(int i=6;i<10005;i++)
 	{
 			dp[i]=dp[i-1]+1;
 			
 			for(int j=2;j*j<=i;j++)
 			{
 				if(i%j==0)
 				dp[i]=min(dp[i],dp[j]+dp[i/j]);
			}
	}
	while(scanf("%d",&n)!=EOF){
		
		printf("%d\n",dp[n]);
		
	} 
	return 0;
}


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页