zoukankan      html  css  js  c++  java
  • UVA 647 Coin Change

    这道题不是我做出来的:但是方法很值得学习,首先通过这种方法我才知道在线oj判题的时候不是一个数据一个数据的而是一个文件一组,也就是判断程序运行时间的输入不是一个数据而是一组数据,所以本题采用了打表法。因为用正常的思路复杂度接近O(n3),时间接近三秒,而用打表法只需运行一遍算出7489种状态,再输入时只需调用即可,时间为0.03s左右:

    代码如下:

    #include<stdio.h>
    #include<string.h>
    #define MAXN 8000
    int n;
    int V[5], f[MAXN];
    void prepare()
    {
    int i, j;
    n = 7489;
    memset(f, 0, sizeof(f));
    f[0] = 1;
    for(i = 1; i <=5; i ++)
    for(j = V[i]; j <= n; j ++)
    f[j] += f[j - V[i]];
    }
    void input()
    {
    prepare();
    while(scanf("%d",&n) == 1)
    {
    printf("%d\n", f[n]);
    }
    }
    int main()
    {
    V[1] = 1; V[2] = 5; V[3] = 10; V[4] = 25; V[5] = 50;
    input();
    return 0;
    }



  • 相关阅读:
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    c++ , const对象中的变量不能被修改
    C++,常成员函数
    c++,给常成员变量赋值
    C++中,引用作为函数参数
    C++中,如何定义和使用指向成员函数的指针
  • 原文地址:https://www.cnblogs.com/yuzhaoxin/p/2388763.html
Copyright © 2011-2022 走看看