Cine poate face astazi problema dau 100p + coronita e vorba de backtraking.
Anexe:
larea99:
Scrieți codul pe pastebin și atât. sau o poză merge orice.
Răspunsuri la întrebare
Răspuns de
1
#include <iostream>
#include <fstream>
using namespace std;
int L, n;
int a[100]; //Vectorul cu repere
int v[100]; //Vectorul solutiei
void afis(int k){
static int nr = 1;
cout << "\nSolutia #" << nr++ << " : ";
for(int i = 1; i <= k;i++) cout << v[i] << " ";
}
void backt(int lung, int k){
for (int i=1; i <=n;i++){
v[k] = a[i];
lung += a[i];
if(lung == L) afis(k);
else if (lung < L) backt(lung,k+1);
lung -= a[i];
}
}
int main()
{
ifstream in("date.txt");
in >> L >> n;
for (int i=1;i<=n;i++) in >> a[i];
backt(0,1);
}
static int nr = 1; poate fi inlocuit cu un simplu int nr = 1; in fata functiei. Tot ce face static e sa pastreze variabila respectiva la iesirea din functie.
Daca e cazul, mai verifici (in afis - daca vrei; sau poti chiar si in backt ) ca numerele din vectorul v[] sa fie in ordine crescatoare. Astfel nu vei mai avea "dubluri"
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Franceza,
8 ani în urmă
Chimie,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă