0% au considerat acest document util (0 voturi)
7 vizualizări5 pagini

S6PD

Documentul prezintă rezolvarea a două probleme de programare dinamică care implică transportul unui tren format din vagoane cu pasageri și respectiv deminearea unui câmp minat folosind mișcări de tipul calului la șah.

Încărcat de

adinaise
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
7 vizualizări5 pagini

S6PD

Documentul prezintă rezolvarea a două probleme de programare dinamică care implică transportul unui tren format din vagoane cu pasageri și respectiv deminearea unui câmp minat folosind mișcări de tipul calului la șah.

Încărcat de

adinaise
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

Programare dinamica

1. Parcurgeti materialul din fisierul [Link] si rezolvati problemele propuse.

2. Probleme [Link]:

[Link]

[Link]

[Link]

[Link]

[Link]

[Link]

[Link]

[Link]

[Link]

[Link]

[Link]

[Link]

[Link]

tren1
Timp maxim de executie/test: 0.1 secunde
Memorie totala disponibila/stiva: 16 MB/1 MB

renul despre care discutam este format dintr-o locomotiva si N vagoane (numerotate de la 1 la N,
incepand de la locomotiva). In fiecare vagon se afla un numar cunoscut de pasageri (sa notam
cu vi numarul de pasageri din vagonul i). Pasagerilor nu li se permite sa se deplaseze de la un vagon la
altul.
Locomotiva s-a defectat si pentru a duce vagoanele la destinatie, pot fi utilizate 3 minilocomotive, aduse
din statia de tren cea mai apropiata. O minilocomotiva poate trage un numar mic de vagoane (maxim M),
iar in general cele 3 minilocomotive nu sunt suficiente pentru a trage toate vagoanele din care este format
trenul.
O minilocomotiva poate trage o secventa de vagoane (vagoane consecutive ale trenului). Secventa de
vagoane trasa de minilocomotiva 1 nu trebuie sa inceapa neaparat cu primul vagon (minilocomotiva 1
poate trage mai intai pe o linie moarta vagoanele de la inceputul trenului pe care nu le duce la destinatie
si apoi sa preia secventa de maxim M vagoane pe care sa o duca la destinatie). Secventa de vagoane
trasa de minilocomotiva 1 nu trebuie sa fie adiacenta cu secventa de vagoane trasa de minilocomotiva 2.
Minilocomotiva 2 poate trage pe o linie moarta vagoanele situate intre ultimul vagon tras de locomotiva 1
si primul vagon pe care locomotiva 2 intentioneaza sa-l duca la destinatie.
In mod analog, secventa de vagoane trasa de minilocomotiva 2 nu trebuie sa fie adiacenta cu secventa
de vagoane trasa de minilocomotiva 3.
De exemplu, sa presupunem ca trenul are N=7 vagoane, iar o minilocomotiva poate trage
maxim M=2 vagoane. Sa consideram ca numarul de pasageri din fiecare vagon este:

1 2 3 4 5 6 7
35 40 50 10 30 45 60

Daca minilocomotiva 1 duce la destinatie vagoanele 1-2, minilocomotiva 2 duce vagoanele 3-4, iar
minilocomotiva 3 duce vagoanele 6-7, numarul de pasageri care ajung la destinatie este 240 si acesta
este maximul posibil.

Cerinta

Scrieti un program care sa determine numarul maxim de pasageri ce pot fi transportati la destinatie cu
cele 3 minilocomotive.

Date de intrare

Fisierul de intrare [Link] contine pe prima linie un numar natural N reprezentand numarul de
vagoane. Cea de a doua linie contine N numere naturale separate prin cate un spatiu v1 v2 ... vN,
reprezentand numarul de pasageri din fiecare vagon. Cea de a treia linie contine un numar natural M care
reprezinta numarul maxim de vagoane care pot fi trase de o minilocomotiva.

Date de iesire

Fisierul de iesire [Link] contine o singura linie pe care se afla numarul maxim de pasageri ce pot fi
transportati cu 3 minilocomotive.

Restrictii

M<=N<=50000
vi<=100, pentru orice 1<=i<=N

Exemplu

[Link] [Link]
7 240
35 40 50 10 30 45 60
2

[Link]

mine
Timp maxim de execuţie / test: 1.2s
Memorie totala disponibilă / stivă: 16MB / 1MB

Un câmp de luptă a fost minat şi sarcina lui Gigel, căutător de mine specializat, este să demineze câmpul respectiv. Gigel a marcat câmpul
de luptă, împărţindu-l în N linii şi N coloane. El a reuşit să determine unde sunt minele şi le-a marcat.
Pentru a demina terenul, el porneşte dintr-o poziţie iniţială cunoscută. Pentru a dezamorsa o mină el trebuie să se afle în poziţia minei
respective.
Pentru a minimiza pericolul acţionării accidentale a unei mine, el vrea să încerce o nouă strategie, şi anume să parcurgă terenul, plecând din
locul unde se află, deplasându-se numai spre dreapta şi făcând numai paşi de tipul mişcărilor calului pe tabla de şah (vezi figura), adică din
poziţia (i,j), unde i reprezintă linia, iar j coloana, poate să ajungă doar în una dintre poziţiile (i-2,j+1), (i-
1,j+2), (i+1,j+2), (i+2,j+1), fără a părăsi câmpul de luptă.

Cerinţă
Determinaţi numărul maxim de mine pe care Gigel le poate dezamorsa, plecând din poziţia sa iniţială.

Date de intrare
Prima linie a fişierului de intrare [Link] conţine o valoare naturală T, reprezentând numărul de cazuri de test. Apoi urmează cazurile
de test. Fiecare caz de test are următoarea formă:
- prima linie conţine o valoare naturală N, reprezentând dimensiunea câmpului de luptă;
- apoi urmează N linii, fiecare linie conţinând N caractere, care pot fi ′.′, ′G′ sau ′M′. Caracterul ′.′ reprezintă o poziţie fără mină,
caracterul ′M′ reprezintă o poziţie în care se află o mină, iar caracterul ′G′ poziţia iniţială a lui Gigel. Gigel lucrează singur, deci există un
singur caracter ′G′ în datele de intrare. În poziţia iniţială a lui Gigel nu există mină.

Date de ieşire
În fişierul de ieşire [Link] se va afişa pentru fiecare caz de test o singură linie pe care se va găsi numărul maxim de mine
dezamorsate în cazul respectiv.

Restricţii
1 ≤ T ≤ 5
4 ≤ N ≤ 1000

Exemple

[Link] [Link] Explicaţii


1 2 În fişierul de intrare există un singur caz de test.
5 Cele două mine dezamorsate de Gigel sunt: (3,2) şi (4,4) sau (2,3)şi
G....
..M.. (4,4)
.M...
...M.
.....

[Link]

farfurii
Timp maxim de executie/test: 0.6 secunde
Memorie totala disponibila/stiva: 16 MB/1 MB

In bucataria unei gospodine se afla un teanc format din N farfurii. Gospodina care urmeaza sa le spele
este pusa in fata unei probleme. Ea cunoaste cat timp dureaza spalarea fiecarei farfurii. De asemenea ea
poate sa renunte la spalarea ei si sa o sparga, insa spargerea dureaza exact un minut, pentru oricare
farfurie. Farfuriile sunt numerotate cu numere de la 1 la N, incepand cu farfuria din varful teancului spre
cea de la baza teancului. Farfuria care poate fi spalata la un moment dat este cea situata in varful
teancului. Initial gospodina poate spala sau sparge farfuria cu numarul 1, dupa care poate face acelasi
lucru cu farfuria numarul 2, s.a.m.d. De asemenea, gospodina poate lasa in teanc farfurii nespalate.
Este cunoscut timpul T exprimat in minute, pe care gospodina il are la dispozitie.

Cerinta

Realizati un program care determina care este numarul maxim de farfurii pe care le poate spala
gospodina in timpul T dat. Pentru acest numar maxim de farfurii obtinut, determinati si timpul minim
necesar spalarii lor.

Date de intrare

Fisierul de intrare [Link] contine pe prima linie doua numere naturale N T separate printr-un
spatiu, reprezentand numarul de farfurii si respectiv timpul avut la dispozitie de gospodina. Pe
urmatoarea linie se gaseste un sir de N numere naturale ts1, ts2, ..., tsN, separate prin cate un spatiu,
reprezentand timpii de spalare al fiecarei farfurii, in ordine, incepand cu farfuria 1.

Date de iesire
In fisierul de iesire [Link] se vor scrie pe o singura linie numerele Nmax si Tmin despartite
printr-un spatiu. Nmaxreprezinta numarul maxim de farfurii pe are le poate spala gospodina in timpul T,
iar Tmin timpul minim de spalarea lor.

Restrictii
0 < N <= 1000
0 < T <= 10000
0 <= tsi<= 100

Exemplu

[Link] [Link] [Link] [Link] Explicatii


4 4 2 3 7 11 4 10 Primul exemplu:
1 4 1 3 10 3 2 1 4 Se spala prima farfurie (1 min), se
2 4 sparge a doua farfurie (1 min), se
spala a treia farfurie (1 min).

Al doilea exemplu:
Se sparg farfuriile 1 si 5 si se spala
farfuriile 2, 3, 4 si 6.
(Tmin=1+3+2+1+1+2=10)

Common questions

Dezvoltat cu IA

The initial position 'G' is significant because it sets the starting point for all strategic moves, influencing the accessibility of mines and overall ability to navigate efficiently using knight-like moves. Depending on 'G's location, the range and number of reachable mines can vary greatly. An optimal starting position centrally located or with easily accessible prime trajectories can vastly improve the number of defusable mines by enabling more combinations of forward perspectives and revisiting potential pathways within turn limits .

The adjacency restriction between mini-locomotive sequences complicates the strategy by preventing contiguous allocation of carriages, necessitating strategic gaps. This introduces additional complexity where the solution must ensure there is at least one carriage unchosen or bypassed between sequences, preventing simple greedy algorithms. Instead, solutions must use a dynamic programming approach to explore non-adjacent configurations, balancing sequence selection for maximizing overall passenger count while adhering to fixed locomotive capacity over spatially diverse arrangements .

The maximum computational complexity for solving the dishwashing problem using dynamic programming would be O(N * T), where N is the number of dishes and T is the total time available. This complexity arises because each dish could potentially be either washed or skipped (broken), leading to a two-dimensional table where subproblems for each possible time limit and dish count are solved once and stored for reuse, thereby optimizing future decisions .

The constraints for employing mini-locomotives include: each mini-locomotive can pull a maximum of M carriages, they must not pull consecutive sets of carriages, and these carriage sequences should not overlap or be contiguous. For example, between the carriages pulled by mini-locomotive 1 and mini-locomotive 2, there must be at least one carriage not pulled. This ensures that the total number of passengers transported is maximized by selecting optimal, non-contiguous sequence pulls .

Gigel's ability to defuse mines is restricted by his knight-like movement pattern, which inherently skips certain positions and confines possible access paths. Some mines may be positioned in such a way that they can never be reached without leaving the boundaries, essentially creating inaccessible zones. Furthermore, the initial position of 'G' and the strategic pattern in which mines are placed could limit reachable positions accessible within feasible moves, thus not all mines can be defused under practical scenarios .

The dynamic programming approach is suitable for this problem because it involves making decisions at each step—washing or breaking a dish—based on previously computed optimal solutions for a given subset of dishes. By storing the maximum number of dishes that can be washed within various time limits up to T, the housewife can efficiently determine the optimal strategy for washing as many dishes as possible. This approach uses the computed solutions for smaller subproblems to build up to the solution for washing the maximum number of dishes within the total available time .

Gigel must utilize knight-like movements on a chessboard to navigate the battlefield effectively, starting from a known initial position 'G'. The strategy involves planning moves such as to (i-2,j+1), (i-1,j+2), (i+1,j+2), and (i+2,j+1), ensuring each move remains within the battlefield's constraints without re-triggering mines. Gigel needs to prioritize paths that allow access to the highest number of mines. Dynamic programming can help by storing the results of optimal paths and decisions through recursive exploration and backtracking .

Dynamic programming offers a comprehensive approach by considering multiple sequences and their cumulative passenger counts, whereas a greedy algorithm might choose locally optimal solutions that don't lead to maximum total passengers. Greedy methods might prematurely fixate on pulling large groups early, missing out on rearranged sequences yielding better results once gaps are factored and all sequences must be weighed equally for impact under constraints like allocation adjacency. Dynamic programming stores solutions to subproblems allowing exhaustive exploration across potential sequences, ensuring an optimal allocation strategy .

Mini-locomotive restrictions, such as non-contiguity and limited carrying capacity, are central to forming the dynamic programming model. These constraints require the problem to be broken down into sub-problems where the model evaluates potential passenger sequences. By iterating through possible start points and permissible sequences for each mini-locomotive, the program constructs an optimal path to maximize passengers across all locomotives. The constraints dictate the boundaries and framework of possible solutions, hence shaping the entire strategy and computation process .

The washing time of each dish directly influences which dishes are selected for washing to maximize the total number washed. Dishes with shorter washing times are prioritized since they allow more dishes to be washed in the available time T. The decision-making process involves comparing the time left after washing a dish versus the potential to wash more dishes afterward, pushing the program to evaluate the optimal combination of wash and break actions. This evaluation is crucial to ensuring that time is strategically allocated across all dishes .

S-ar putea să vă placă și