NYOJ 708 ones
2014-03-03 14:27
417 查看
题目链接~~>
做题感悟:开始以为只要把一个数分成尽量相等的两个数相乘就可以了,其实大部分数据都对。
解题思路:如果n是素数则 f [ n ] = f [ n-1]+1 ,否则 遍历n的约数找最小的。f [ n ] = min ( f [ n-1 ]+1,f [ j ] + f [ n / j ] ) .
代码(本人):
优代码:
做题感悟:开始以为只要把一个数分成尽量相等的两个数相乘就可以了,其实大部分数据都对。
解题思路:如果n是素数则 f [ n ] = f [ n-1]+1 ,否则 遍历n的约数找最小的。f [ n ] = min ( f [ n-1 ]+1,f [ j ] + f [ n / j ] ) .
代码(本人):
#include<stdio.h> #include<iostream> #include<map> #include<string> #include<string.h> #include<stdlib.h> #include<math.h> #include<vector> #include<queue> #include<algorithm> using namespace std ; const int MX = 10005 ; int f[MX] ; bool is_prime[MX] ; int prime[MX],num ; void init() { num=0 ; memset(is_prime,false,sizeof(is_prime)) ; for(int i=2 ;i<MX ;i++) { if(!is_prime[i]) prime[num++]=i ; for(int j=0 ;j<num&&i*prime[j]<MX ;j++) { is_prime[i*prime[j]]=true ; if(i%prime[j]==0) break ; } } } int min(int x,int y) { return x < y ? x : y ; } void pret() { memset(f,0,sizeof(f)) ; f[1]=1 ; f[2]=2 ; f[3]=3 ; f[4]=4 ; for(int i=5 ;i<MX ;i++) if(is_prime[i]) { f[i]=f[i-1]+1 ; for(int j=2 ;j<=sqrt(i) ;j++) if(i%j==0) f[i]=min(f[i],f[j]+f[i/j]) ; } else f[i]=f[i-1]+1 ; } int main() { init() ; pret() ; int n ; while(~scanf("%d",&n)) printf("%d\n",f ) ; return 0 ; }
优代码:
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; int dp[10005]={0,1,2,3,4,5,0,0,0}; int main() { int n,i,j; for(i=6;i<10005;i++) { dp[i]=dp[i-1]+1; for(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 ); } }
相关文章推荐
- Linux系统管理常用命令及参数说明中文版
- IOS7系列 完美越狱参考
- 使用SpriteBuilder制作Cocos2D游戏完全中文教程(七)
- 测速 ip
- 做一名合格的大学生
- 存储那些事儿(二): 下一代Linux文件系统BTRFS简介
- Android中从源码分析关于AsyncTask的使用
- 存储那些事儿(二): 下一代Linux文件系统BTRFS简介
- 关于android编程中service和activity的区别
- 为什么我喜欢EJB 3.0并且尤其喜欢EJB 3.1
- 修改应用程序的配置的资源文件,并按配置发布应用程序工具
- 向Web开发人员推荐12款优秀的 Twitter Bootstrap 组件和工具(转载)
- Oracle中merge into的使用
- CodeIgniter 分页类使用
- java测试题请各位高手多多指点
- 基于weblogic 的EJB 学习笔记-JSP教程,资料/其它
- ARM-Linux驱动相关头文件知识点
- 微软Windows多媒体技术介绍
- Oracle SQL Trace 和 10046 事件
- Anagrams