Skip to content

Commit df8e78b

Browse files
committed
aa
0 parents  commit df8e78b

7 files changed

+310
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
int main()
5+
{
6+
cout << "Enter your expression:\n ";
7+
string expression;
8+
cin >> expression;
9+
stack<int> Stack;
10+
int length = expression.size();
11+
bool result = false;
12+
13+
for(int i = 0; i<length; i++){
14+
char character = expression[i];
15+
if(character=='(' || character=='{' || character=='['){
16+
Stack.push(character);
17+
}
18+
else if (character==')' || character=='}' || character==']'){
19+
if(Stack.empty()) {
20+
result = true;
21+
break;
22+
}
23+
else if((character==')'&&Stack.top()=='(') || (character=='}'&&Stack.top()=='{') || (character==']'&&Stack.top()=='[') ){
24+
Stack.pop();
25+
}
26+
}
27+
}
28+
if(result==true) {
29+
cout << "Opening bracket missing. Invalid arithmetic expression \n";
30+
}
31+
else if(!Stack.empty()) {
32+
cout << "Closing bracket missing. Invalid arithmetic expression \n";
33+
}
34+
else {
35+
cout << "Valid arithmetic expression \n";
36+
}
37+
return 0;
38+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <stdio.h>
2+
3+
int coin_change(int coins[], int size, int sum)
4+
{
5+
int dp[size + 1][sum + 1];
6+
7+
for (int i = 0; i <= size; i++)
8+
{
9+
for (int j = 0; j <= sum; j++)
10+
{
11+
if (i == 0) {
12+
dp[0][j] = 0;
13+
}
14+
else if (j == 0) {
15+
dp[i][0] = 1;
16+
}
17+
else if (coins[i - 1] > j) {
18+
dp[i][j] = dp[i - 1][j];
19+
}
20+
else {
21+
dp[i][j] = dp[i - 1][j] + dp[i][j - coins[i - 1]];
22+
}
23+
}
24+
}
25+
26+
return dp[size][sum];
27+
}
28+
29+
int main()
30+
{
31+
int coins[] = { 1, 2, 3, 4, 5, 7};
32+
int size = sizeof(coins) / sizeof(coins[0]);
33+
int sum = 12;
34+
int result = coin_change(coins, size, sum);
35+
printf("Number of ways are : %d",result);
36+
return 0;
37+
}

gold-mine-problem.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
4+
const int MAX = 100;
5+
6+
int getMaxGold(int gold[][MAX], int m, int n)
7+
{
8+
int goldTable[m][n];
9+
memset(goldTable, 0, sizeof(goldTable));
10+
11+
for (int col=n-1; col>=0; col--)
12+
{
13+
for (int row=0; row<m; row++)
14+
{
15+
int right = (col==n-1)? 0: goldTable[row][col+1];
16+
17+
int right_up = (row==0 || col==n-1)? 0:
18+
goldTable[row-1][col+1];
19+
20+
21+
int right_down = (row==m-1 || col==n-1)? 0:
22+
goldTable[row+1][col+1];
23+
24+
25+
goldTable[row][col] = gold[row][col] +
26+
max(right, max(right_up, right_down));
27+
28+
}
29+
}
30+
31+
32+
int res = goldTable[0][0];
33+
for (int i=1; i<m; i++)
34+
res = max(res, goldTable[i][0]);
35+
return res;
36+
}
37+
38+
39+
int main()
40+
{
41+
int gold[MAX][MAX]= { {1, 3, 1, 5},
42+
{2, 2, 4, 1},
43+
{5, 0, 2, 3},
44+
{0, 6, 1, 2}
45+
};
46+
int m = 4, n = 4;
47+
cout <<"Maximum " << getMaxGold(gold, m, n) << " amount of gold can be collected.";
48+
return 0;
49+
}

kmp-string-searching.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
void lpstable(int* lps, string pat, int m) {
5+
int i = 1, j = 0;
6+
while(i<m) {
7+
if(pat[i]==pat[j]) {
8+
lps[i] = ++j;
9+
i++;
10+
}
11+
else{
12+
if(j!=0){
13+
j = lps[j-1];
14+
}
15+
else {
16+
lps[i] = 0; i++;
17+
}
18+
}
19+
}
20+
}
21+
22+
void KMP(string text, string pat, int n, int m) {
23+
int lps[m];
24+
lps[0] = 0;
25+
lpstable(lps, pat, m);
26+
cout << "LPS Table of " << pat << " is: ";
27+
for(int i = 0; i<m; i++) {
28+
cout << lps[i] << " ";
29+
}
30+
cout << endl;
31+
int i = 0, j = 0;
32+
while(i<n) {
33+
if( text[i]==pat[j]) {
34+
i++,j++;
35+
if(j==m) {
36+
cout << "Pattern Found at Index: " << i - j << endl;
37+
j = lps[j-1];
38+
}
39+
}
40+
else{
41+
if(j!=0) {
42+
j = lps[j-1];
43+
}
44+
else i++;
45+
}
46+
}
47+
}
48+
49+
int main() {
50+
//freopen("in.txt", "r", stdin);
51+
string text, pat;
52+
cout << "Enter the Text: ";
53+
getline(cin,text);
54+
cout << "Enter the Pattern: ";
55+
getline(cin, pat);
56+
int n = text.size(), m = pat.size();
57+
cout << "The length of the text: " << n << endl;
58+
cout << "The length of the pattern: " << m << endl;
59+
KMP(text, pat, n, m);
60+
return 0;
61+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
4+
5+
int MatrixChainOrder(int p[], int n)
6+
{
7+
int m[n][n];
8+
9+
int i, j, k, L, q;
10+
11+
for (i=0; i<n; i++)
12+
m[i][i] = 0;
13+
14+
for (L=2; L<n; L++)
15+
{
16+
for (i=1; i<n-L+1; i++)
17+
{
18+
j = i+L-1;
19+
m[i][j] = INT_MAX;
20+
for (k=i; k<j; k++)
21+
{
22+
q = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
23+
if (q < m[i][j])
24+
25+
m[i][j] = q;
26+
}
27+
}
28+
29+
}
30+
for(int i = 1; i <n; i++){
31+
for(int j = 1; j <n; j++){
32+
if(j >= i){
33+
cout << m[i][j] << "\t";
34+
}
35+
else {
36+
cout << "\t";
37+
}
38+
39+
}
40+
cout << endl;
41+
}
42+
return m[1][n-1];
43+
}
44+
45+
int main()
46+
{
47+
int arr[] = {4,10,3,12,20,7};
48+
int size = sizeof(arr)/sizeof(arr[0]);
49+
cout<< MatrixChainOrder(arr,size)<<" Minimum scalar operations";
50+
51+
}

minimum-cost-path-problem.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
const int Size = 100;
5+
int minimumPath(int dp_table[Size][Size], int row, int col){
6+
int minPath[row][col];
7+
for(int i = 0; i<row; i++) {
8+
for(int j = 0; j<col; j++) {
9+
if(i==0 && j==0) {
10+
minPath[i][j] = dp_table[0][0];
11+
}
12+
else if(j==0) {
13+
minPath[i][j] = minPath[i-1][j] + dp_table[i][j];
14+
}
15+
else if(i==0){
16+
minPath[i][j] = minPath[i][j-1] + dp_table[i][j];
17+
}
18+
else {
19+
minPath[i][j] = (minPath[i][j-1]>minPath[i-1][j] ? minPath[i-1][j]: minPath[i][j-1]) + dp_table[i][j];
20+
}
21+
}
22+
}
23+
return minPath[row-1][col-1];
24+
}
25+
26+
int main() {
27+
int row, col;
28+
cout << "Enter number of rows: ";
29+
scanf("%d",&row);
30+
cout << "Enter number of columns: ";
31+
scanf("%d",&col);
32+
33+
int dp_table[Size][Size];
34+
cout << "Enter table value:\n";
35+
for(int i=0; i<row; i++) {
36+
for(int j=0; j<col; j++) {
37+
scanf("%d", &dp_table[i][j]);
38+
}
39+
}
40+
printf("The Minimum cost value is: %d\n", minimumPath(dp_table, row, col));
41+
return 0;
42+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
int subset_sum(int set[], int size, int sum)
4+
{
5+
int i, j, dp_table[size+1][sum+1];
6+
for(i = 0; i <= size; i++){
7+
for(j = 0; j <= sum; j++){
8+
if(i == 0 && j == 0)
9+
dp_table[i][j] = 1;
10+
else if(i == 0 && j!= 0)
11+
dp_table[i][j] = 0;
12+
else if(set[i-1] > j)
13+
dp_table[i][j] = dp_table[i-1][j];
14+
else dp_table[i][j] = dp_table[i-1][j] || dp_table[i-1][j-set[i-1]];
15+
}
16+
}
17+
return dp_table[size][sum];
18+
}
19+
20+
int main()
21+
{
22+
int set[]={2,3,4}, sum = 8, size, status;
23+
size = sizeof(set)/sizeof(set[0]);
24+
status = subset_sum(set, size, sum);
25+
if(status == 1){
26+
cout << "There exist a subset for the given set";
27+
}
28+
else {
29+
cout << "Not subset exist for the given set";
30+
}
31+
return 0;
32+
}

0 commit comments

Comments
 (0)