Pagini recente » Istoria paginii principiul-includerii-si-excluderii | Istoria paginii runda/pregatire_cls10_oji | Istoria paginii utilizator/vrebiegiegrejgoperpegorogpe | Monitorul de evaluare | Cod sursa (job #1295540)
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
ifstream si;
si.open("rucsac.in");
ofstream so;
so.open("rucsac.out");
int n;
int m;
si>>m>>n;
int o[m][2],j,k;
int i,l;
for(i=0;i<m;++i)
{
si>>o[i][0]>>o[i][1];
j=i;
k=o[i][0];
l=o[i][1];
while(j>0&&k<o[j-1][0])
{
o[j][0]=o[j-1][0];
o[j][1]=o[j-1][1];
--j;
}
o[j][0]=k;
o[j][1]=l;
}
int pm[n+1];
pm[0]=0;
bool uz[n+1][m];
for(i=0;i<=n;++i)
for(j=0;j<m;++j)
uz[i][j]=false;
bool d;
for(i=1;i<=n;++i)
{
pm[i]=0;
d=false;
for(j=0;j<m&&o[j][0]<=i;++j)
if(pm[i]<pm[i-o[j][0]]+o[j][1]&&uz[i-o[j][0]][j]==false)
{
d=true;
pm[i]=pm[i-o[j][0]]+o[j][1];
for(k=0;k<m;++k)
uz[i][k]=uz[i-o[j][0]][k];
uz[i][j]=true;
}
if(d==false)
{
pm[i]=pm[i-1];
for(j=0;j<m;++j)
uz[i][j]=uz[i-1][j];
}
}
cout<<pm[n-1];
}