
如果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; }
- 上一篇 nyoj 814 又见拦截导弹
- 下一篇 nyoj 613 免费的馅饼
查看评论