Hogyan oldható meg ez a mohó stratégiás feladat? (C++)
A feladat szövege:
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





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.





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;});
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]





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





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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!