Robie to zadanie http://main.edu.pl/user.phtml?op=showtask&task=prz&con=OI11
Algorytm mam już wymyslony i wydaje się poprawny, problem z kodowaniem...
Nie wiem zupełnie co poprawić aby otrzymać dobry wynik, choc wszystko pisze zgodnie ze swoim pomysłem.
Otóż, algorytm ma ze zbioru oczekujacych bajtołazów wybierac po kolei tych, którzy mogą przejsc na druga strone. Wybranych wrzucam do tablicy tab2. Jesli ob_waga, czyli waga tych na moscie jest wieksza od obciazenia wtedy przeszukuje tablice tab2 aby znalezc najwolniejszego (czyli tego, który bedzie miał najwiekszy czas). Kiedy go znajde, dodaje wynik do sumy (sumuje wszystkich najwolniejszych), czyszcze tab2 i rozpoczynam poszukiwania nastepnej grupy od miejsca w ktorym poprzednio skonczylem w tab.
Pytanie tylko, gdzie moge robic bład, sprawdzałem większość możliwości, ale żadna nie chce działać
#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
#include<map>
using namespace std;
int main(){
int n,ob,czas,waga,suma=0,max=0,ob_waga=0,max_czas=0;
vector<pair<int,int> >tab;
vector<pair<int,int> >::iterator it;
vector<pair<int,int> >tab2;
vector<pair<int,int> >::iterator it2;
cin>>ob>>n;
for(int i=0;i<n;++i){
cin>>czas>>waga;
tab.push_back(make_pair(waga,czas)); //tablica grupy oczekujacej
sort(tab.begin(),tab.end());
for(it=tab.begin();it!=tab.end();++it){
if(ob_waga+it->first < ob){
tab2.push_back(make_pair(it->first,it->second)); //tablica tych na moscie
ob_waga+=it->first; //waga kolejnego dodana do wagi wszystkich na moscie
if(ob_waga+it->first > ob){
for(it2=tab2.begin();it2!=tab2.end();++it2){
if(it2->second > max_czas) max_czas=it2->second;
}
suma+=max_czas;
tab2.clear();
ob_waga=0; //zaczynam nowe poszukiwanie w pozostalej grupie, wiec waga mostu=0;
}
}
}
}
cout<<suma<<endl;
}