zoukankan      html  css  js  c++  java
  • [恢]hdu 1058

    2011-12-18 05:46:17

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=1058

    题意:找质因数只有2 3 5 7的第i个数。

    mark:本来是dp,但是为了寻找一种新的比较好做的解法,可以这样做:

    假设dp[i]表示第i个满足条件的数字,则dp[i]一定由前i-1个数字乘以2、3、5、7中的一个数得到。枚举前i-1个数每个乘以2、3、5、7,得到的不小于dp[i-1]的最小值为dp[i]。递推。复杂度应该是5000*5000*4,不过加优化勉强能过。

    代码:

    # include <stdio.h>

    typedef long long ll ;


    ll dp[6000] = {0, 1} ;


    int main ()
    {
    int i, j, k, n ;
    ll prime[4] = {2, 3, 5, 7} ;
    ll min, num ;
    char str[4][4] = {"st", "nd", "rd", "th"} ;
    int idx ;
    for (i = 2 ; i <= 5842 ; i++)
    {
    min = dp[i-1]* 7 ;
    for (j = i-1 ; j >= 1 && dp[j] * 7 > dp[i-1]; j--)
    {
    for (k = 0 ; k < 4 ; k++)
    {
    num = prime[k] * dp[j] ;
    if (num > dp[i-1] && num < min)
    min = num ;
    }
    }
    dp[i] = min ;
    }

    while (~scanf ("%d", &n) && n)
    {
    if (n % 10 == 1 && n % 100 != 11)
    idx = 0 ;
    else if (n % 10 == 2 && n % 100 != 12)
    idx = 1 ;
    else if (n % 10 == 3 && n % 100 != 13)
    idx = 2 ;
    else idx = 3 ;

    printf ("The %d%s humble number is %I64d.\n", n, str[idx], dp[n]) ;
    }
    return 0 ;
    }



  • 相关阅读:
    Unity中的欧拉旋转
    Unity-Rigidbody碰撞穿透
    C#实现单例模式的几种方法
    C#OO初级思想
    C#虚方法virtual
    数据库查询
    DNS 域名服务器搭建
    iptables 基本操作
    通过adb 操作手机
    linux 调整逻辑卷空间大小
  • 原文地址:https://www.cnblogs.com/lzsz1212/p/2315229.html
Copyright © 2011-2022 走看看