Cod sursa(job #1328943)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 28 ianuarie 2015 21:40:24
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <algorithm>
#define INF 10001
using namespace std;

int N,S,K,C[22],L[22];
short t[102][1002],D[102][1002],i,j,sol[102],k;
ifstream fin("sant.in");
ofstream fout("sant.out");
int main(){
    fin>>S>>N>>K;
    for(int i=1;i<=K;i++)
        fin>>L[i]>>C[i];
    for(int i=1;i<=N;i++)
        for(int j=1;j<=S;j++)
            D[i][j]=INF;
    for(int i=1;i<=K;i++)
        if(C[i]<D[1][L[i]]){
            D[1][L[i]]=C[i];
            t[1][L[i]]=i;
        }
    for(int i=2;i<=N;i++)
        for(int j=1;j<=S;j++)
            for(int p=1;p<=K;p++)
                if(j-L[p]>0)
                if(D[i][j]>D[i-1][j-L[p]]+C[p]){
                    D[i][j]=D[i-1][j-L[p]]+C[p];
                    t[i][j]=p;
                }
    if(D[N][S]==INF){
        fout<<0;
        fin.close();fout.close();
        return 0;
    }
    fout<<D[N][S]<<"\n";
    int i=N,j=S;
    while(i>=1){
        sol[i]=t[i][j];
        j-=L[t[i][j]];
        i--;
    }
    sort(sol+1,sol+N+1);
    for(int i=1;i<=N;i++)
        fout<<sol[i]<<" ";
    fin.close();fout.close();
    return 0;
}