poj-1338Ugly Numbers

http://poj.org/problem?id=1338

DP 一步一步累乘上去  用三個標記比較大小就行

#include<iostream>
#include<fstream>
using namespace std;
long long a[1501];
int n;
void read()
{
    int i,j,k;
    int a1=1,a2=1,a3=1;
    a[1]=1;
    a1=1;
    a2=1;
    a3=1;
    for(i=2; i<=1500; i++)
    {
        a[i]=min(a[a1]*2,min(a[a2]*3,a[a3]*5));
        if(a[i]==a[a1]*2)
            a1++;
        if(a[i]==a[a2]*3)
            a2++;
        if(a[i]==a[a3]*5)
            a3++;

    }

}
int main()
{
    read();
    while(~scanf("%d",&n))
    {
        if(n==0) break ;
        printf("%d\n",a[n]);
    }
    return 0;
}


發佈了49 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章