2016-07-20 15 views
-6

Heres das Problem: Ein Milchmann dient Milch in abgepackten Flaschen unterschiedlicher Größe. Die mögliche Größe der Flaschen ist {1, 5, 7 und 10} Liter. Er möchte die gewünschte Menge mit möglichst wenig Flaschen liefern, unabhängig von der Größe. Ihr Ziel ist es, ihm zu helfen, die Mindestanzahl von Flaschen zu finden, die erforderlich sind, um den gegebenen Milchbedarf zu decken.auf dynamische Programmierung stecken

Eingangsformat:

erste Zeile enthält Anzahl der Testfälle N nächsten N Zeilen enthalten jeweils eine positive ganze Zahl ist, die Li auf die Nachfrage von Milch entspricht.

Ausgabeformat:

Für jeden Eingang Li, drucken Sie die minimale Anzahl von Flaschen benötigt die Nachfrage

ich diesen Code für das Problem geschrieben haben, zu erfüllen.

#include <iostream> 
#include <vector> 
#include <stdio.h> 
#include <set> 
#include <algorithm> 
#include <string> 
#include <queue> 
#include <map> 
#include <iomanip> 
#include <locale> 
#include <stdlib.h> 
#include <cstring> 
#include <cmath> 
#include <tgmath.h> 
using namespace std; 
const int INF = 1000000000; 
int m[4] = { 1, 5, 7, 10 }; 
int r[100000000]; 

int milk(int n) { 
    int q; 

    if (r[n] < INF) 
     return r[n]; 

    if (n <= 0) 
     q = 0; 
    else { 
     q = INF; 
     for (int i = 0; i < 4; i++) { 
      if (n >= m[i]) 
       q = min(q, 1 + milk(n - m[i])); 
     } 
    } 

    r[n] = q; 

    return q; 
} 

int main() { 
    int t, n; 
    cin >> t; 

    while (t--) { 
     cin >> n; 
     memset(r, INF, sizeof(r)); 
     cout << milk(n) << endl; 
    } 

    return` 0; 
} 

ich verwendet habe, dynamische Programmierung für this.But erhalte ich nur einen Ausgang Null für alle input.I sind hier Hilfe dp.Please.

+5

Es klingt wie Sie müssen lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: ** [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

+0

Danke für die Hilfe. Könnten Sie bitte sagen Ich, dass, ob ich dp in einer korrekten Weise implementiert haben. @ NathanOliver –

+3

@TahaJiruwala Es liegt an Ihnen, herauszufinden, wenn Sie Ihren Code mit dem Debugger durchlaufen. –

Antwort

-3
int milk(int n) { 
    int min; 
    memset(r, 0, sizeof(r)); 
    for (int i = 1; i <= n; i++) { 
     min = 10000000; // some very large value greater than n 
     for (j = 0; j <= 3; j++) { 
      if (m[j] > i) 
       continue; 
      else if (r[i - m[j]] < min) 
       min = r[i - m[j]]; 
     } 
     r[i] = min; 
    } 
    return r[n]; 
} 

Ich hoffe, das funktioniert und es würde Ihnen helfen, Kommentar, wenn Sie irgendwelche Zweifel haben.

+2

was war falsch mit OPs Code? Was hast du geändert? – user463035818

+0

Ja, die Codes funktionieren. Sie können eine Memo-Version dafür angeben. –

+3

@TahaJiruwala Lol. Hast du das wirklich nur gesagt? SO ist kein Code-Schreibdienst. Wenn Sie bei Codierungsaufgaben schummeln, sind Sie schlechter als Melania – sehe

Verwandte Themen