• 枚举优化题(状态保存)——USACO3.1.3


    输出第N个丑数
    假设存在第k个丑数,然后想知道第k+1个丑数,可以通过枚举n个给定的质数与前k个丑数相乘,得出大于第k个丑数且最小的数,
    但n个给定的质数与前k个丑数相乘时显然会浪费时间,可以开pr[]数组保存第i个给定的质数已经乘到第几个丑数了
    思想:保存当前状态,避免重复计算……
    View Code
    #include<stdio.h>

    int a[109];
    int pr[109];
    int cou[1000009];

    int main()
    {
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
    int i,j;
    for(i=1;i<=n;i++)
    {
    pr[i]
    =1;
    }

    for(i=1;i<=n;i++)
    {
    scanf(
    "%d",&a[i]);
    }

    int add=1,min,temp,k;
    cou[
    1]=1;
    for(i=2;i<=m+1;i++)
    {
    min
    =0x7fffffff;//开到最大,不然会错
    for(j=1;j<=n;j++)
    {
    temp
    =cou[pr[j]]*a[j];
    while(temp<=cou[i-1])
    {
    pr[j]
    ++;
    temp
    =cou[pr[j]]*a[j];

    }
    if(min>temp)
    {
    min
    =temp;
    }
    }
    cou[i]
    =min;
    }

    printf(
    "%d\n",cou[m+1]);
    }
    }
  • 相关阅读:
    单向循环列表(Java实现)
    单链表的实现(Java实现)
    二分查找法(Java实现)
    六大排序算法(Java实现)
    学习python第十天
    学习python第九天
    MapNode
    AtomicReference
    AtomicStampedReference
    尾递归(TailRecursion)
  • 原文地址:https://www.cnblogs.com/huhuuu/p/1972478.html
Copyright © 2020-2023  润新知