列表

详情


MT13. 拼凑面额

描述

给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成 n 元的不同组合的个数。

数据范围: ,保证 n 是整数

输入描述

输入为一个数字N,即需要拼凑的面额

输出描述

输出也是一个数字,为组成N的组合个数。

示例1

输入:

5

输出:

2

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2018-09-07

#include<stdio.h>

int main()
{
    int n;
    int money[6]={1,5,10,20,50,100};
    while(scanf("%d",&n)!=EOF)
    {
        long long  dp[10000];
        for(int j=0;j<=n;j++)
            dp[j]=1;
        for(int i=1;i<6;i++)
            for(int j=1;j<=n;j++)
            {
                if(j>=money[i])
                    dp[j]+=dp[j-money[i]];
            }
        printf("%ld",dp[n]);
    }
    return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2017-09-28

#include<iostream>
#include<vector>
using namespace std;
 
int main()
{
    int N;
    char a[6]={1,5,10,20,50,100};
    cin>>N;
    vector<long> d(N+1,0);
    d[0]=1;
    for(int i=0;i<6;i++)
        for(int j=1;j<=N;j++)
            if(j>=a[i])
                d[j]=d[j]+d[j-a[i]];
 
    cout<<d[N]<<endl;
 
    return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2017-09-16

/*暴力求解
**
*/
#include<iostream>
#include<vector>
using namespace std;

int main()
{
	int N;
	char a[6]={1,5,10,20,50,100};
	cin>>N;
	vector<long> d(N+1,0);
	d[0]=1;
	for(int i=0;i<6;i++)
		for(int j=1;j<=N;j++)
			if(j>=a[i])
				d[j]=d[j]+d[j-a[i]];

	cout<<d[N]<<endl;

    return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2017-09-04

#include<bits/stdc++.h>
using namespace std;
int main()
    {
    int N;
    char a[6]={1,5,10,20,50,100};
    cin>>N;
    vector<long> d(N+1,0);
    d[0]=1;
    for(int i=0;i<6;i++)
        for(int j=1;j<=N;j++)
            if(j>=a[i])
                d[j]=d[j]+d[j-a[i]];
    
    cout<<d[N]<<endl;
    return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2017-08-26

#include<iostream>
#include<vector>
using namespace std;
 
int main()
{
    int N;
    char a[6]={1,5,10,20,50,100};
    cin>>N;
    vector<long> d(N+1,0);
    d[0]=1;
    for(int i=0;i<6;i++)
        for(int j=1;j<=N;j++)
            if(j>=a[i])
                d[j]=d[j]+d[j-a[i]];
 
    cout<<d[N]<<endl;
 
    return 0;
}

上一题