日期:2014-05-16  浏览次数:20377 次

JSU省赛队员选拔赛个人赛1(Coin Change、Fibbonacci Number、Max Num、单词数、无限的路、叠筐)

JSU省赛队员选拔赛个人赛1

一、题目概述:

    A、Coin Change(暴力求解、动态规划)
    B、Fibbonacci Number(递推求解)

    C、Max Num(排序、比较)

    D、单词数(字符串比较、库函数运用)

    E、无限的路(平面几何)

    F、叠筐(规律输出)

二、解题报告:


A、Coin Change

      给一个钱的总金额,求出用100个以内的50分、25分、10分、5分、1分硬币拼成该金额的不同拼法。

      直接暴力,打表什么的都是浮云。开始总觉得用暴力求解显得自己没风度,不够高端霸气上档次。当面临各种WA时,什么都是浮云,唯有AC才是王道。

       用i,j,k,x,y分别表示50分、25分、10分、5分、1分硬币的数量,用四重循环直接暴力(不用五层。剩下的变量直接可以求得)。当y=n-x*5-k*10-j*25-i*50;并且y不小于0,硬币总数不大于100的时候,表示这种拼法是可以的,计数变量sum自加一,最后直接输出计数变量即可。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
    int n;
    int i,j,k,x,y;
    while(cin>>n)
    {
        __int64 sum=0;
        for(i=0; i<=n/50; i++)   //50分的硬币i个
            for(j=0; j<=n/25; j++)   //25分的硬币j个
                for(k=0; k<=n/10; k++)   //10分的硬币k个
                    for(x=0; x<=n/5; x++)   //5分的硬币x个
                    {
                        y=n-x*5-k*10-j*25-i*50;  //一分的硬币y个
                        if(y>=0&&i+j+k+x+y<=100)sum++; //满足要求,这种拼法是可以的
                    }
        cout<<sum<<endl;
    }
    return 0;
}

B、
Fibbonacci Number

     没什么好讲的,直接用公式来算就好了。

     不过要注