1. 程式人生 > >使用最少的硬幣

使用最少的硬幣

在小X生活的國家裡,很多面額都有硬幣。小X的存錢罐裡有四種硬幣,分別是5元的、10元的、20元的和50元。當他要付錢時,總是希望使用的硬幣數量最少。現在告訴你小X擁有的四種硬幣的數量,請你幫小X求出最好的付款方案(可能方案不存在)。

Input

輸入包含不超過10組資料。 每組資料由一行五個用空格隔開的整數A、B、C、D、S組成(0<=A,B,C,D<=1000000,1<=S<=10000000),分別表示小X擁有的5元硬幣、10元硬幣、20元硬幣和50元硬幣的個數,以及小X現在需要付的錢數(單位:元)。

Output

對於每組資料,如果小X無法付款,則輸出一行一個整數-1;否則輸出一行五個用空格隔開的整數a、b、c、d、s,分別表示付款方案中小X需要用掉的5元硬幣、10元硬幣、20元硬幣和50元硬幣的數量,以及小X需要花費的總硬幣數。

Sample Input
1 2 3 4 35
1 2 3 4 567
Sample Output
1 1 1 0 3

-1

這道題用的是暴力列舉,有點藍橋杯的感覺

程式碼如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    int n,m,i,j;
    int a[10],b[10],c[10];
    while(scanf("%d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&m)!=EOF){
        int f=0;
        for(b[0]=a[3]; b[0]>=0; b[0]--)//50
        {
            if(b[0]*50>m)
                continue;
            for(b[1]=a[2]; b[1]>=0; b[1]--)//20
            {
                if(b[0]*50+b[1]*20>m)
                    continue;
                for(b[2]=a[1]; b[2]>=0; b[2]--)//10
                {
                    if(b[0]*50+b[1]*20+b[2]*10>m)
                        continue;
                    for(b[3]=a[0]; b[3]>=0; b[3]--)//5
                    {

                        if(b[0]*50+b[1]*20+b[2]*10+b[3]*5>m)
                            continue;
                        if(b[0]*50+b[1]*20+b[2]*10+b[3]*5==m)
                        {
                            c[0]=b[0];
                            c[1]=b[1];
                            c[2]=b[2];
                            c[3]=b[3];
                            f=1;
                            break;
                        }
                    }
                    if(f==1)
                        break;
                }
                if(f==1)
                    break;
            }
            if(f==1)
                break;
        }
        if(f==0)
        {
            printf("-1\n");
        }
        else
        {
            printf("%d %d %d %d %d\n",c[3],c[2],c[1],c[0],c[0]+c[1]+c[2]+c[3]);
        }
}
    return 0;
}


相關推薦

1720: 最少硬幣問題

1720: 最少硬幣問題 時間限制: 1 Sec  記憶體限制: 64 MB提交: 88  解決: 27[提交][狀態][討論版][命題人:外部匯入] 題目描述 設有n種不同面值的硬幣,各硬幣的面值存於陣列T[1:n]中。現要用這些面值的硬幣來找

【VMware】 2019校招線上考試 (python)(數量有限的最少硬幣問題、還能拖多久、最大整數)

1.硬幣個數有限,要求用最少的硬幣找錢。 硬幣個數有限,要求用最少的硬幣找錢。 假設各種硬幣面值t[i](順排),個數c[i],a[i][j]為用t[0]..t[i]面值的硬幣找錢j的最少硬幣個數。 則a[i][j] = min{k + a[i - 1][j

最少硬幣問題(動態規劃遞推式)

最少硬幣問題 時間限制(普通/Java) : 1000 MS/ 3000 MS          執行記憶體限制 : 65536 KByte總提交 : 247            測試

最少硬幣找零問題-動態規劃

動態規劃把問題分為子為題,解決了這些子問題,再把子問題合併起來,便可以得到問題的解。在解決子問題過程中,需要把子問題的解儲存起來方便後面使用。 最少硬幣找零問題為:給予不同面值的硬幣若干種種(每種硬幣個數無限多),用若干種硬幣組合為某種面額的錢,使硬幣的的個數最少。

貪心演算法最少硬幣

package com.web; import java.util.Scanner; /** * Created by. */ public class Permutation { public static void main(String[] args) {

最少硬幣問題(動態規劃解決)

設有n中不同面值的硬幣,各硬幣的面值存在於陣列T[1..n]中,可以使用的面值硬幣個數不限。假如現在找的錢是j,1<<j<<L,求使得的硬幣數目最少 解決方法: 另c[i,j]代表用前中硬幣兌換j所用的最少數目。#include "stdafx.h"

動態規劃-最少硬幣組合問題

import java.util.Scanner; /* * 假設有 1 元,3 元,5 元的硬幣若干(無限),現在需要湊出 11 元,問如何組合才能使硬幣的數量最少? */ public cla

C++實現最少硬幣兌換問題

#include<iostream> #include<fstream> using namespace std; int n,L; //n種硬幣L長的陣列 int c[13][20]; int T[13];//硬幣面值 int jisuan(int i,int j);

【動態規劃】最少硬幣換取目標錢數【0-1揹包問題】

/*********************************** 最少硬幣換取目標錢數【0-1揹包問題】 ***************************************/ /***************************** 思路: 1.建立

動態規劃:最少硬幣找零問題、01揹包問題、完全揹包問題

題目一:01揹包問題 一個揹包總容量為V,現在有N個物品,第i個 物品體積為weight[i],價值為value[i],現在往揹包裡面裝東西,怎麼裝能使揹包的內物品價值最大? 題目二:完全揹包問題 一個揹包總容量為V,現在有N個物品,第i個 物品體積為weight[i],價值為value[i],每

動態規劃解決最少硬幣湊成m元錢

You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need t

硬幣組合問題之最少硬幣個數

問題:如果我們有面值為1元、3元和5元的硬幣若干枚,如何用最少的硬幣湊夠11元? 此題容易讓人在動態規劃和貪心演算法之間徘徊,畢竟對於初學者來說這兩種演算法要熟練掌握還是需要時間和實踐的。 首先可以肯定的回答:貪心演算法是行不通的。如果使用貪心演算法,肯定是每次找最大的然後

最少硬幣問題(多重揹包問題)

最少硬幣問題 問題描述:設有n種不同面值的硬幣,各硬幣的面值存在於陣列T[1:n]中。現要用這些面值的硬幣來找錢。可以使用的各種面值的硬幣個數存於陣列Coins[1:n]中。對任意錢數0£m£20001,設計一個最少硬幣找錢m的方法。 演算法設計:對於給定的1£n£1

動態規劃-最少硬幣問題

題目描述 如果我們有面值為1元、3元和5元的硬幣若干枚,如何用最少的硬幣湊夠11元? 分析 來手寫一下求取最小個數的過程,用MIN[i]表示要湊得i元所需的最少硬幣個數 MI

CSU 1926: 使用最少硬幣

題目:Description在小X生活的國家裡,很多面額都有硬幣。小X的存錢罐裡有四種硬幣,分別是5元的、10元的、20元的和50元。當他要付錢時,總是希望使用的硬幣數量最少。現在告訴你小X擁有的四種硬

使用最少硬幣

在小X生活的國家裡,很多面額都有硬幣。小X的存錢罐裡有四種硬幣,分別是5元的、10元的、20元的和50元。當他要付錢時,總是希望使用的硬幣數量最少。現在告訴你小X擁有的四種硬幣的數量,請你幫小X求出最好的付款方案(可能方案不存在)。 Input 輸入包含不超過10組資料

你有1元、5元、7元三種硬幣,求一種方法,用最少硬幣湊出m元

/* * 程式碼:學習動態規劃的思想,採用自底向上,用迭代去實現。 * * 硬幣數目的最小單元是1、3、5,湊一次必須使用三個單元之一,假設 * 錢的數目為m,則 m = 1 * x + 3 * y + 5 * z; * * 如果要湊夠0元,只有一種方案,

動態規劃 需要最少硬幣

假設給你 總額為11元,硬幣種類為 1,3,5. 求最小的硬幣數 遞推公式為:d(i)=min{ d(i-vj)+1 }  vj為面額 1,3,或者5 這個基本是最簡單的動態規劃演算法,程式碼如下:p

[Python] 獲得最少數量的貨幣硬幣方式

“”" #題目: 手中有M種的面值的錢 ,現在有一價格是N的物品,求出買東西的 數量最少的組合 #第一行輸入兩個數字,第一個數字 M ,第二個數字是 價格 N #第二行是 對應的面值的種類 :10 ,2

BZOJ 1411 ZJOI2009 硬幣遊戲

ret dea 遊戲 true 硬幣 air 技術 i++ include 遞推; 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using n