Ecco qui:
Il codice prende come prima missione quella che ha somma fra durata e scadenza minima;
Va avanti e prende la missione con la durata minima e per la quale la somma dei giorni fino ad ora è minore della scadenza;
Se invece ci sono più durate uguali, prendo la missione con la scadenza minore;
(Errore di battitura: nel programma riportato d è la scadenza e s la durata)
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
const int MAX=100;
int d[MAX],s[MAX],v[MAX];
void solve(int n,int dim,int& cont,int somm);
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s[i]>>d[i];
}
int min=INT_MAX,cont=0,dim=0,somm,ind;
for(int i=0;i<n;i++)
{
if(d[i]+s[i]<min)
{
min=d[i]+s[i];
ind=i;
}
}
v[0]=ind;
dim++;
cont++;
somm=s[ind];
solve(n,dim,cont,somm);
cout<<cont;
}
void solve(int n,int dim,int& cont,int somm)
{
bool contr,trov=false;
int mind=INT_MAX,mins=INT_MAX,ind;
for(int i=0;i<n;i++)
{
contr=false;
for(int j=0;j<dim and contr==false;j++)
{
if(v[j]==i) contr=true;
else contr=false;
}
if(contr==false)
{
if(s[i]<mins and somm+s[i]<=d[i])
{
mins=s[i];
mind=d[i];
ind=i;
trov=true;
}
else if(s[i]==mins)
{
if(d[i]<mind)
{
mins=s[i];
mind=d[i];
ind=i;
trov=true;
}
}
}
}
if(trov==true)
{
v[dim]=ind;
somm+=mins;
dim++;
cont++;
solve(n,dim,cont,somm);}
}