zoukankan      html  css  js  c++  java
  • HDOJ 1284 钱币兑换问题

    转自:wutianqi http://www.wutianqi.com/?p=981

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1284

    tag:母函数

    直接套母函数的模版~~~

    #include <iostream>
    using namespace std;
     
    int c1[32768], c2[32768] = {0};
    int main()
    {
        int i, j, k, h;
     
        for (i = 0; i <= 32767; i++)
            c1[i] = 1;
        for (i = 2; i <= 3; i++)
        {
            for (j = 0; j <= 32767; j++)
            {
                for (k = 0; k + j <= 32767; k += i)
                {
                    c2[k + j] += c1[j];
                }
            }
            for (h = 0; h <= 32767; h++)
            {
                c1[h] = c2[h];
                c2[h] = 0;
            }
        }
     
        int n;
        while (scanf("%d", &n) != EOF)
            printf("%d
    ", c1[n]);
     
        return 0;
    }

    后来发现这题其实可以不用母函数的:
    思路:
    直接COPY网上的了。
    就是求2x+3y+k=m的问题这时m就可以写成m=6*q+k;
    带入上式子 可得到 y=3*q+k/2-3*x/2;
    x的取值0-2*q之间的偶数
    有1+q中 所以else后面要加1

    #include <stdio.h>
    int main()
    {
        __int64 n,i,j,sum;
        while(scanf("%I64d",&n)==1)
        {
            sum=0;
            for(i=0;i<=n/3;i++)
            {
                sum+=(n-i*3)/2+1;
            }
            printf("%I64d
    ",sum);
        }
    }

    最后一个,还是母函数的思想,但是时间是0MS~~~
    AMB教主的代码~~~Orz

    #include<iostream>
    using namespace std;
     
    int num[32768];
    void main()
    {
        int n,i;
        num[0]=1;
        for(i=1;i<32768;i++)
            num[i]+=num[i-1];
        for(i=2;i<32768;i++)
            num[i]+=num[i-2];
        for(i=3;i<32768;i++)
            num[i]+=num[i-3];
        while(cin>>n)
            printf("%d
    ",num[n]);
    }
  • 相关阅读:
    序列化
    执行mysql脚本
    MinGW-notepad++开发c/c++程序
    MySql免安装版配置方法
    Wamp 简单使用方法
    [锋利JQ]-图片提示效果
    [锋利的JQ]-超链接提示效果
    PHPcms 系统简单使用
    NC帮助文档网址
    NC的开发模型
  • 原文地址:https://www.cnblogs.com/panweishadow/p/3205523.html
Copyright © 2011-2022 走看看