2591两个丑数
1338三个丑数
2247四个丑数
2545任意三个丑数
这几题的意思都差不多,排出一个序列,其中每个数的因子都只含q[0],q[1],q[2]这三个质数或其它,然后求出给定的第n个丑数
贴一份2545的代码
#include<functional>
#include<algorithm>
#include<iostream>
#include<fstream>
#include<sstream>
#include<iomanip>
#include<numeric>
#include<cstring>
#include<climits>
#include<cassert>
#include<cstdio>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<list>
#include<set>
#include<map>
using namespace std;
__int64 dp[2342432];
__int64 min(__int64 q,__int64 w,__int64 e)
{
__int64 m;
m=q<w?q:w;
m=m<e?m:e;
return m;
}
int main()
{
__int64 w,e,r,t,q[3];
while(scanf("%I64d %I64d %I64d %I64d",&q[0],&q[1],&q[2],&w)!=EOF)
{
__int64 i,j;
__int64 b1=1,b2=1,b3=1;
dp[1]=1;
for(i=2;i<=w+1;i++)
{
dp[i]=min(dp[b1]*q[0],dp[b2]*q[1],dp[b3]*q[2]);//找到dp[i]的最小值
if(dp[i]==dp[b1]*q[0])
b1++;
if(dp[i]==dp[b2]*q[1])
b2++;
if(dp[i]==dp[b3]*q[2])
b3++;//各个质数的个数增加
}
printf("%I64d\n",dp[w+1]);
}
return 0;
}