浏览 3411 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-28
这一题开始肯本看不懂,, 后来是反反复复看标程看懂了.. 首先要理解这么一个式子吧(算是式子吧``) 已经求出了j-1个丑数,, 现在求第j个丑数 对于每一个素数p乘以一个最小的丑数, 能使积大于第j-1个丑数 在这些乘积中寻找最小的一个即位第j个丑数. 用pindex[i]表示对于第i个素数乘以的最小丑数是多少.. /* LANG: C ID: zqy11001 PROG: humble */ #include <stdio.h> #include <string.h> #define MAX 100 #define getint(i) scanf("%d", &i) #define insert(i) hum[count++] = i long hum[1000001]; int pindex[MAX]; int prime[MAX]; int count; int main(void) { int k, n; int i; int min, m; freopen("humble.in", "r", stdin); freopen("humble.out", "w", stdout); getint(k); getint(n); for(i = 0; i < k; i++){ getint(prime[i]); } insert(1); memset(pindex, 0, sizeof(int)*k); while(count <= n){ min = 0x7FFFFFFF; for(i = 0; i < k; i++){ while(prime[i] * hum[pindex[i]] <= hum[count - 1]){ pindex[i]++; } if(prime[i] * hum[pindex[i]] < min){ min = prime[i] * hum[pindex[i]]; m = i; } } insert(min); } printf("%d\n", hum[n]); return 0; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |