标签:img def 帮助 ems gif ios eve black 复制
一个整数n表示需要得到的表情数
一个整数ans表示最少需要的操作数
233
17
#include <cstring> #include <cstdio> #include <queue> #define N 1000005 using namespace std; bool notPrime[N],vis[N]; int Prime[N]={0,2,3,5,7,11,13,19},num,n,dis[N]; void spfa() { queue<int>q; q.push(1); memset(dis,0x3f,sizeof(dis)); vis[1]=1; dis[1]=0; for(int now;!q.empty();) { now=q.front();q.pop(); vis[now]=0; for(int i=1;i<=7;++i) { int v=now*Prime[i]; if(v>n+20) break; if(v<n+20&&dis[v]>dis[now]+Prime[i]) { dis[v]=dis[now]+Prime[i]; if(!vis[v]) { vis[v]=1; q.push(v); } } } if(now>0&&dis[now-1]>dis[now]+1) { dis[now-1]=dis[now]+1; if(!vis[now-1]) { vis[now-1]=1; q.push(now-1); } } } } void init() { notPrime[1]=1; for(int i=2;i<=N-5;++i) { if(!notPrime[i]) Prime[++num]=i; for(int j=1;j<=num&&i*Prime[j]<=N-5;++j) { notPrime[i*Prime[j]]=1; if(i%Prime[j]==0) break; } } } int main() { scanf("%d",&n); //init(); spfa(); printf("%d\n",dis[n]); return 0; }
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int n,dp[1000045],lit; int main() { cin>>n; memset(dp,127/3,sizeof(dp)),dp[1]=0; for(int i=1,v,base;i<=n+40;++i) { base=dp[i]; for(v=1;true;++v) if(dp[i+v]+v<=base) base=dp[i+v]+v; else break; dp[i]=base,++base; for(v=1;i+v*i<=n+40;++v) dp[i+v*i]=min(dp[i+v*i],base+v); } cout<<dp[n]; return 0; }
标签:img def 帮助 ems gif ios eve black 复制
原文地址:http://www.cnblogs.com/ruojisun/p/7511079.html