You are on page 1of 4

Question 1: Minimum Number of Coins: DP

#include <iostream>
#include <climits>
#include <vector>
using namespace std;

// Recursion+Memorization
// int min_coins(vector<int> x,int sum,vector<int> &dp){
// if(sum==0){
// return 0;
// }
// if(sum<0){
// return INT_MAX;
// }
// if(dp[sum]!=-1){
// return dp[sum];
// }
// int mini=INT_MAX;
// for(int i=0;i<x.size();i++){
// int ans=min_coins(x,sum-x[i],dp);
// if(ans!=INT_MAX){
// mini=min(mini,ans+1);
// }

// }
// dp[sum]=mini;

// return mini;

// }

// Tabulation:
int min_coins(vector<int> x,int sum,vector<int> &dp){
int mini=INT_MAX;
for(int i=1;i<=sum;i++){
for(int j=0;j<x.size();j++){
if(i-x[j]>=0 && dp[i-x[j]]!=INT_MAX){
dp[i]=min(dp[i],1+dp[i-x[j]]);

}
}
}
return dp[sum];
}
int main(){

vector<int> x={2,3};
int sum=7;
vector<int> dp(sum+1,INT_MAX);
dp[0]=0;
cout<<min_coins(x,sum,dp);
return 0;
}
Question 2: BFS Traversal in a Graph:

#include <iostream>
#include <vector>
#include <unordered_map>
#include <queue>

using namespace std;

vector<int> bfsOfGraph(int V, vector<int> adj[]) {


unordered_map<int,bool> m;
for(int i=0;i<V;i++){
m[i]=false;
}
vector<int> ans;
queue<int> q;
int temp;

q.push(0);
m[0]=true;
while(!q.empty()){
temp=q.front();
ans.push_back(temp);
q.pop();
for(auto i:adj[temp]){
if(!m[i]){
q.push(i);
m[i]=true;
}
}
}

return ans;}
int main() {

int V, E;
cin >> V >> E;

vector<int> adj[V];

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


int u, v;
cin >> u >> v;
adj[u].push_back(v);
}

vector<int> ans = bfsOfGraph(V, adj);


for (int i = 0; i < ans.size(); i++) {
cout << ans[i] << " ";
}

return 0;
}

You might also like