Cod sursa(job #1796570)
| Utilizator | Data | 3 noiembrie 2016 16:49:22 | |
|---|---|---|---|
| Problema | Problema rucsacului | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.59 kb |
#include <fstream>
using namespace std;
ifstream fin ("rucsac.in");
ofstream fout("rucsac.out");
int r[10010];
int g[5010], p[5010];
int n, s, i, j;
// r[i] = profitul maxim sa obtin suma i
int main () {
fin>>n>>s;
for (i=1;i<=n;i++)
fin>>g[i]>>p[i];
r[0] = 1;
for (i=1;i<=n;i++) {
for (j=s;j>=1;j--)
if (r[j] != 0 && j+g[i] <= s)
r[ j+g[i] ] = max (r[j + g[i] ], r[j] + p[i]);
r[g[i]] = max( r[ g[i] ], p[i] );
}
int sol = 0;
for (i=1;i<=s;i++)
sol = max(sol, r[i]);
fout<<sol;
}
