Kezdőoldal » Számítástechnika » Programozás » Hogyan oldható meg ez a mohó...

Hogyan oldható meg ez a mohó stratégiás feladat? (C++)

Figyelt kérdés

A feladat szövege:


[link]



Elakadtam a programozási feladatomban, melyet csatolva találhattok meg. Az első rész, az, hogy hány gép szükséges, sikerült. Viszont, a beosztás elkészítése, hogy melyik napon hányas gép végezze a munkát, az eddig nem, mégpedig az nem, hogy hogyan lehetne olyan naphoz, ahol korábbi gép még nem szerepel korábbi gépet beírni. Ebben szeretnék ötleteket kérni. A cout << G << endl; utáni rész ez.



Az eddigi kódom:


#include <iostream>

#include <cmath>


using namespace std;


const int MaxN = 10000;

const int MaxM = 100000;


struct munka

{

int s;

int n;

int g;

int h;

};


int main()

{

cerr << "Gepek" << endl;

/// deklaracio

int N;

int M;

double G;

int H[MaxM];

int m[MaxN] = {};

int t;

/// beolvasas

cerr << "N = ?: ";

cin >> N;

cerr << "M = ?: ";

cin >> M;

for (int i=0;i<M;i++)

{

cerr << i+1 << ". megrendeles hatarideje: ";

cin >> H;

}

/// Rendezes (hatarido szerint novekvoleg)

int s;

for (int i=0;i<M-1;i++)

{

for(int j=i+1;j<M;j++)

{

if (H > H[j])

{

s = H;

H = H[j];

H[j] = s;

}

}

}

/// Megoldas

for (int i=0;i<M;i++)

{

t = H;

m[t]++;

}

G = 0;

double msz = 0;

double gsz = 0;

for (int i=0;i<N;i++)

{

msz = msz + m;

gsz = ceil(msz / i);

if (gsz > G)

{

G = gsz;

}

}

cout << G << endl;

int nap = 0;

int gep = 1;

for (int i=0;i<M;i++)

{

if (nap < H[i])

{

nap++;

cout << nap << " " << gep << endl;

}

else

{

nap = 1;

gep++;

cout << nap << " " << gep << endl;

}

}

return 0;

}



feladat (1).pdf156,2 KB

Válasz

Téma törlésének kezdeményezése


C++MUNKA

HASONLÓ PROBLÉMÁK:

CRTP ősosztály miatt miért nem elég a _single_inheritance Visual C++-ban?

Szabadúszó szoftverfejlesztőt/programozót keresek!

Saját osztály, unique_ptr használata, .NET-hez hasonló a deklaráláshoz

Fájlból beolvasás láncolt listába C++

Feladat,rendezés nem kivitelezhető

C++ hatékonyabb megoldás

Else if c++

C++ Qt Creator automatikus mentés visszatöltése

Adatnyilvántartó program

Miért "egyesülnek" a szálak?

Beadandó. Meglévő C# kódból átírás Java koddá

C++ switch probléma

mutass többet!

hirdetés

Kezdd a változást velünk!

hirdetés

Az igazival bárhová elmennél…

hirdetés

Élethű játékélmény a Samsung Neo QLED TV-vel



2022. máj. 27. 06:57
1 2 3
 21/26 anonim ***** válasza:
76%

Nem baj, csereld le a rendezeseket akkor STL sort-ra (vagy implementalj hatekonyabb rendezest, ha mindenkeppen te akarsz rendezest irni valamiert), ugy mar le fog futni normalis ido alatt.

Mondjuk a 2. rendezesedet azert megprobalhatod kiiktatni, az tenyleg teljesen trivialis. Azon gondolkozz el, hogy mi van, ha mondjuk van egy unordered_map<munka_sorszama, pair<nap, gep>>-ed. Aztan azon, hogy hasznalhatsz-e esetleg a map-nel is gyorsabb adatstrukturat (konstans faktorral persze, O(1)-nel semmi nem lesz aszimptotikusan gyorsabb), ha tudod a munkak szamat.

2022. máj. 27. 22:30
Hasznos számodra ez a válasz?
 22/26 A kérdező kommentje:
A sort-os rendezést az akadályozza, vagy legalábbis nehezíti hogy struct-ot használok.
2022. máj. 27. 23:14
 23/26 anonim ***** válasza:
76%

Csak egy lambdat kell megadnod a sort-nak, ami alapjan rendezni akarsz.

sort(jobs.begin(), jobs.end(), [](Job& a, Job& b){return a.x < b.y;});

2022. máj. 27. 23:30
Hasznos számodra ez a válasz?
 24/26 A kérdező kommentje:

Köszönöm az eddigi segítségeket. Sikerült jelentősen hatékonyabbá tenni, de még mindig várok hatékonyításra ötleteket. Például mire gondoltál akkor amikor azt mondtad, hogy nincs is szükség a rendezésre? Nekem ez még mindig nem látható, hogy ezt, hogyan lehetne elhagyni. A double-t pedig azért nem tudom kiküszöbölni, mert egész számokat osztok, ami ugyebár lehet, hogy nem egész számot fog adni.


Itt a mostani kód: [link]

2022. máj. 28. 09:42
 25/26 anonim ***** válasza:

Leirtam #21-ben, hogy lehet elhagyni a 2. rendezesedet. Ha azt megcsinalod, akkor az adhat otletet az 1. rendezes elhagyasahoz.


"A double-t pedig azért nem tudom kiküszöbölni, mert egész számokat osztok, ami ugyebár lehet, hogy nem egész számot fog adni"


int a = 5, b = 3;

cout << a / b; // 1, egesz szam

2022. máj. 28. 10:03
Hasznos számodra ez a válasz?
 26/26 anonim ***** válasza:
Ilyenkor áldom a kisemmizett oktatási rendszerünket, hogy nekünk a mohó algoritmust még papíron kellett levezetni grafikus módon. Utána leprogramozni már álmából felkeltve is le tudta a delikvens, bármilyen feladatra ráillesztve. Optimálisan!
2022. máj. 30. 08:09
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!