Cod sursa(job #895307)

Utilizator alexandrul_21Niculescu Mihai alexandrul_21 Data 27 februarie 2013 10:52:04
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <stdio.h>
#define MAX_G 10000
using namespace std;
int N,G;
int P[MAX_G+5],V[MAX_G+5];
void PD(int k,int g,int p){
    int i,n=G-g,s;
    for(i=0;i<=n;i++){
        s=g+i;
        if(V[i]&&V[i]!=k){
            if(P[s]<P[i]+p){
                P[s]=P[i]+p;
                V[s]=k;
            }
        }
    }
//    printf("intrat\n");
}
void write(){
    int i;
    for(i=0;i<=G;i++){
        printf("%d -> %d %d\n",i,P[i],V[i]);
    }
}
void Read(){
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);
    scanf("%d %d\n",&N,&G);
    int i,g,p;
    V[0]=-1;
    for(i=1;i<=N;i++){
        scanf("%d %d\n",&g,&p);
        PD(i,g,p);
    }
    fclose(stdin);
    //write();
    for(i=G;i>=0;i++)
        if(V[i]){
            printf("%d",P[i]);
            fclose(stdout);
            return;
        }

}
int main()
{
    Read();
    return 0;
}