I am implementing matrix chain multiplication program in c++. I am using ONLINE_JUDGE
flag to write output to the file. When i run the program it does not produce correct output in file, but it is producing correct output in console.
My Program:
#include<bits/stdc++.h>using namespace std;int main(){ #ifndef ONLINE_JUDGE // For getting input from input.txt file freopen("C:\\Users\\Rahul kumar\\desktop\\Algorithm\\input.txt", "r", stdin); // Printing the Output to output.txt file freopen("C:\\Users\\Rahul kumar\\desktop\\Algorithm\\output.txt", "w", stdout); #endif // dimension of four matrices vector<pair<int,int>>matrices; matrices.push_back(make_pair(5,4)); matrices.push_back(make_pair(4,6)); matrices.push_back(make_pair(6,2)); matrices.push_back(make_pair(2,7)); vector<int>p; // algorithm helper data int last; // column of last matrix. for(auto matrix:matrices){ p.push_back(matrix.first); last=matrix.second; } p.push_back(last); // add last matrix. int numberOfMatrix=matrices.size(); int dp[numberOfMatrix][numberOfMatrix]; for(int i=0;i<numberOfMatrix;i++){ for(int j=0;j<numberOfMatrix;j++){ dp[i][j]=0; } } for(int i=0;i<numberOfMatrix;i++){ for(int j=0;j<numberOfMatrix;j++){ if(i==j){ dp[i][j]=0; }else if(j==i+1){ dp[i][j]=p[i]*p[i+1]*p[i+2]; }else{ int best=5000; for(int k=i;k<j;k++){ printf("dp[%d][%d]=%d, dp[%d][%d]=%d, p[%d]=%d, p[%d]=%d, p[%d]=%d\n",i,k,dp[i][k],k+1,j,dp[k+1][j],i,p[i],k+1,p[k+1],j+1,p[j+1]); best=min(best,dp[i][k]+dp[k+1][j]+p[i]*p[k+1]*p[j+1]); cout<<"I: "<<i<<" J: "<<j<<" Best: "<<best<<endl; } dp[i][j]=best; } } } for(int i=0;i<numberOfMatrix;i++){ for(int j=0;j<numberOfMatrix;j++){ cout<<dp[i][j]<<""; } cout<<endl; } return 0;}
OUTPUT in output.txt
file:
I: 0 J: 2 Best: 40I: 0 J: 2 Best: 40I: 0 J: 3 Best: 140I: 0 J: 3 Best: 140I: 0 J: 3 Best: 110I: 1 J: 3 Best: 168I: 1 J: 3 Best: 1040 120 40 110 5000 0 48 104 5000 5000 0 84 5000 5000 5000 0 dp[0][0]=0, dp[1][2]=0, p[0]=5, p[1]=4, p[3]=2dp[0][1]=120, dp[2][2]=0, p[0]=5, p[2]=6, p[3]=2dp[0][0]=0, dp[1][3]=0, p[0]=5, p[1]=4, p[4]=7dp[0][1]=120, dp[2][3]=0, p[0]=5, p[2]=6, p[4]=7dp[0][2]=40, dp[3][3]=0, p[0]=5, p[3]=2, p[4]=7dp[1][1]=0, dp[2][3]=0, p[1]=4, p[2]=6, p[4]=7dp[1][2]=48, dp[3][3]=0, p[1]=4, p[3]=2, p[4]=7
Not expected output.
When i comment this code
#ifndef ONLINE_JUDGE // For getting input from input.txt file freopen("C:\\Users\\Rahul kumar\\desktop\\Algorithm\\input.txt", "r", stdin); // Printing the Output to output.txt file freopen("C:\\Users\\Rahul kumar\\desktop\\Algorithm\\output.txt", "w", stdout); #endif
and run the program then the output on the console is..
dp[0][0]=0, dp[1][2]=0, p[0]=5, p[1]=4, p[3]=2I: 0 J: 2 Best: 40dp[0][1]=120, dp[2][2]=0, p[0]=5, p[2]=6, p[3]=2I: 0 J: 2 Best: 40dp[0][0]=0, dp[1][3]=0, p[0]=5, p[1]=4, p[4]=7I: 0 J: 3 Best: 140dp[0][1]=120, dp[2][3]=0, p[0]=5, p[2]=6, p[4]=7I: 0 J: 3 Best: 140dp[0][2]=40, dp[3][3]=0, p[0]=5, p[3]=2, p[4]=7I: 0 J: 3 Best: 110dp[1][1]=0, dp[2][3]=0, p[1]=4, p[2]=6, p[4]=7I: 1 J: 3 Best: 168dp[1][2]=48, dp[3][3]=0, p[1]=4, p[3]=2, p[4]=7I: 1 J: 3 Best: 1040 120 40 1105000 0 48 1045000 5000 0 845000 5000 5000 0I: 1 J: 3 Best: 1040 120 40 1105000 0 48 1045000 5000 0 845000 5000 5000 0
This output is expected, but different form output of the file. This happens many times with me. I am running this program on vs code.