공부/알고리즘2

RACE bellman Ford

pflower 2014. 11. 6. 11:29

#include <iostream>

#include <fstream>


using namespace std;


fstream fin;


int d[1000];

int p[1000];


int t[1000];

int dist[1000];


int T;

int n;


void bf(int u, int v, int c)

{

   if (d[v] > d[u] + c)

   { 

  d[v] = d[u] + c;

       p[v] = u; 

   }

}


int main()

{

fin.open("input.txt");

fin >> T >> n;


for(int i = 1; i <= n + 1; i ++)

fin >> dist[i];

for(int i = 1; i <= n; i ++)

fin >> t[i];


t[n + 1] = 0;


for(int i = 0; i <= n; i ++) {

d[i] = 987654321;

p[i] = -1;

}

d[0] = 0;

for(int i = 0;  i <= n; i ++) {

int localLen = 0;

for(int j = i + 1; j <= n + 1; j ++) {

localLen += dist[j];

if(localLen > T)

break;

bf(i, j, t[j]);

}

}


int head = n;

int sumtime = 0;

int ans[100];

int iter = 0;


while(head != 0)

{

sumtime += t[head];

ans[iter++] = head;

head = p[head];

}


cout << sumtime << endl;

cout << iter << endl;

for(int i = iter - 1; i >= 0; i --)

{

cout << ans[i] << " ";

}



cout << endl;


return 0;

}