Skip to content

Commit c648d5a

Browse files
author
Skm2000
committed
DP
1 parent 26e2755 commit c648d5a

4 files changed

+99
-0
lines changed

Maximum_Sum_Dividing_Recurssive.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#include<iostream>
2+
using namespace std;
3+
int main()
4+
{
5+
int t;
6+
cin>>t;
7+
while(t--){
8+
int n;
9+
cin>>n;
10+
int dp[n+1];
11+
dp[0]=0,dp[1]=1;
12+
for(int i=2;i<=n;i++){
13+
dp[i]=max(dp[i/2]+dp[i/3]+dp[i/4],i);
14+
}
15+
cout<<dp[n]<<"\n";
16+
}
17+
return 0;
18+
}

Maximum_length_of_pairs.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
int findLongestChain(vector<vector<int>>& pairs) {
2+
int n=pairs.size();
3+
int dp[n+1],res=1;
4+
sort(pairs.begin(),pairs.end());
5+
for(int i=0;i<n;i++){
6+
dp[i]=1;
7+
}
8+
for(int i=1;i<n;i++){
9+
for(int j=0;j<i;j++){
10+
if(pairs[i][0]>pairs[j][1]){
11+
dp[i]=max(dp[i],1+dp[j]);
12+
}
13+
}
14+
res=max(res,dp[i]);
15+
}
16+
if(n==0)return 0;
17+
else return res;
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
int minimumDeleteSum(string s1, string s2) {
4+
int m=s1.length(),n=s2.length();
5+
int dp[m+1][n+1];
6+
for(int i=0;i<=m;i++){
7+
for(int j=0;j<=n;j++){
8+
dp[i][j]=0;
9+
}
10+
}
11+
for(int i=1;i<=m;i++){
12+
dp[i][0]=dp[i-1][0]+s1[i-1];
13+
}
14+
for(int j=1;j<=n;j++){
15+
dp[0][j]=dp[0][j-1]+s2[j-1];
16+
}
17+
for(int i=1;i<=m;i++){
18+
for(int j=1;j<=n;j++){
19+
if(s1[i-1]==s2[j-1]){
20+
dp[i][j]=dp[i-1][j-1];
21+
}
22+
else{
23+
dp[i][j]=min(dp[i-1][j]+s1[i-1],dp[i][j-1]+s2[j-1]);
24+
}
25+
}
26+
}
27+
for(int i=0;i<=m;i++){
28+
for(int j=0;j<=n;j++){
29+
cout<<dp[i][j]<<" ";
30+
}
31+
cout<<"\n";
32+
}
33+
return dp[m][n];
34+
}
35+
int main(){
36+
string s1="eat";
37+
string s2="sea";
38+
minimumDeleteSum(s1,s2);
39+
}

Optimal_Strategy_To_Play_A_Game.cpp

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include<bits/stdc++.h>
2+
#define N 5
3+
using namespace std;
4+
5+
int dp[N][N];
6+
7+
int OptimalStrategy(int coins[],int i,int j){
8+
//Base Cases
9+
if(i==j) return coins[i];
10+
if(i==j+1) return max(coins[i],coins[j]);
11+
if(dp[i][j]==0){
12+
//Taking from the start
13+
int start = coins[i] + min(OptimalStrategy(coins,i+2,j),OptimalStrategy(coins,i+1,j-1));
14+
//Taking from end
15+
int end = coins[j] + min(OptimalStrategy(coins,i,j-2),OptimalStrategy(coins,i+1,j-1));
16+
//maximum of both
17+
dp[i][j] = max(start,end);
18+
}
19+
return dp[i][j];
20+
}
21+
22+
int main(){
23+
24+
}

0 commit comments

Comments
 (0)