Skip to content

Commit c966bd8

Browse files
author
Skm2000
committed
DP
1 parent c648d5a commit c966bd8

10 files changed

+196
-20
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
./a.out
1+
a.out

Circular_Kadene.cpp

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// A very beautiful explalation given in leetcode
2+
// https://leetcode.com/problems/maximum-sum-circular-subarray/discuss/178422/One-Pass
3+
#include<bits/stdc++.h>
4+
using namespace std;
5+
6+
int maxMoney(int arr[], int num)
7+
{
8+
int max_far=arr[0],max_curr=arr[0],min_far=arr[0],min_curr=arr[0],total=arr[0];
9+
for(int i=1;i<num;i++){
10+
max_curr=max(max_curr+arr[i],arr[i]);
11+
max_far=max(max_curr,max_far);
12+
min_curr=min(min_curr+arr[i],arr[i]);
13+
min_far=min(min_far,min_curr);
14+
total+=arr[i];
15+
}
16+
if(max_far>0){
17+
return max(max_far,total-min_far);
18+
}
19+
else{
20+
return max_far;
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
4+
int expandAroundCenter(string s,int left,int right){
5+
if(s.length()==0 || left>right) return 0;
6+
int ans=0;
7+
while(left>=0 && right<s.length() && s[left]==s[right]){
8+
ans++;
9+
left--;
10+
right++;
11+
}
12+
return ans;
13+
}
14+
int CountLPSubstring(string s){
15+
if(s.length()==0) return 0;
16+
int res=0;
17+
for(int i=0;i<s.length();i++){
18+
res+=expandAroundCenter(s,i,i);
19+
res+=expandAroundCenter(s,i,i+1);
20+
}
21+
return res;
22+
}
23+
int main(){
24+
int t;
25+
cin>>t;
26+
while(t--){
27+
int n;
28+
cin>>n;
29+
string s;
30+
cin>>s;
31+
cout<<CountLPSubstring(s)-n<<"\n";
32+
}
33+
}

Friends_Pairing_Problem.cpp

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

GoldMine_Problem.cpp

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
int main(){
4+
int t;
5+
cin>>t;
6+
while(t--){
7+
int m,n;
8+
cin>>n>>m;
9+
int gold[n][m];
10+
for(int i=0;i<n;i++){
11+
for(int j=0;j<m;j++){
12+
cin>>gold[i][j];
13+
}
14+
}
15+
int dp[n][m];
16+
int right,right_up,right_down;
17+
memset(dp,0,sizeof(dp));
18+
for(int i=m-1;i>=0;i--){
19+
for(int j=0;j<n;j++){
20+
right = (i==m-1)?0:dp[j][i+1];
21+
right_up=(i==m-1 || j==0)?0:dp[j-1][i+1];
22+
right_down=(i==m-1 || j==n-1)?0:dp[j+1][i+1];
23+
dp[j][i]=gold[j][i]+max(right,max(right_up,right_down));
24+
}
25+
}
26+
int ans=dp[0][0];
27+
for(int i=1;i<n;i++){
28+
ans=max(ans,dp[i][0]);
29+
}
30+
cout<<ans<<"\n";
31+
}
32+
}

Kadane.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ int Kadane(int a[],int size){
1111
}
1212

1313
int main(){
14-
int a[]={4,-1,2,1};
14+
int a[]={8 ,-8 ,9 ,-9 ,10 ,-11 ,12};
1515
int size=sizeof(a)/sizeof(a[0]);
1616
cout<<Kadane(a,size)<<"\n";
1717
}

Longest_Pallindromic_Substring.cpp

+19-18
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
#include<bits/stdc++.h>
22
using namespace std;
33

4-
int LPSubstring(string s){
5-
int n=s.length();
6-
int dp[n][n],ans=-1;
7-
memset(dp,0,sizeof(dp));
8-
for(int i=0;i<n;i++){
9-
dp[i][i] = 1;
4+
int expandAroundCenter(string s,int left,int right){
5+
if(s.length()==0 || left>right) return 0;
6+
while(left>=0 && right<s.length() && s[left]==s[right]){
7+
left--;
8+
right++;
109
}
11-
for(int i=n-2;i>=0;i--){
12-
for(int j=i+1;j<n;j++){
13-
if(s[i] == s[j]){
14-
dp[i][j] = 2 + dp[i+1][j-1];
15-
}
16-
else{
17-
dp[i][j] = 0;
18-
}
19-
ans = max(ans,dp[i][j]);
10+
return right-left-1;
11+
}
12+
string LPSubstring(string s){
13+
if(s.length()==0) return "";
14+
int start=0,end=0;
15+
for(int i=0;i<s.length();i++){
16+
int len1=expandAroundCenter(s,i,i);
17+
int len2=expandAroundCenter(s,i,i+1);
18+
int len=max(len1,len2);
19+
if(len>end-start){
20+
start=i-(len-1)/2;
21+
end=i+len/2;
2022
}
2123
}
22-
return ans;
24+
return s.substr(start,end-start+1);
2325
}
24-
2526
int main(){
26-
string s = "abcaabaafrg";
27+
string s = "helppreanadkada";
2728
cout<<LPSubstring(s)<<"\n";
2829
}

Maximize_the_cutting.cpp

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include<iostream>
2+
using namespace std;
3+
int main()
4+
{
5+
int t;
6+
cin>>t;
7+
while(t--){
8+
int n,x,y,z;
9+
cin>>n;
10+
cin>>x>>y>>z;
11+
int dp[n+1];
12+
for(int i=0;i<=n;i++) dp[i]=-1;
13+
dp[0]=0;
14+
for(int i=0;i<=n;i++){
15+
if(dp[i]==-1) continue;
16+
if(i+x<=n){
17+
dp[i+x]=max(dp[i+x],dp[i]+1);
18+
}
19+
if(i+y<=n){
20+
dp[i+y]=max(dp[i+y],dp[i]+1);
21+
}
22+
if(i+z<=n){
23+
dp[i+z]=max(dp[i+z],dp[i]+1);
24+
}
25+
}
26+
for(int i=0;i<=n;i++){
27+
cout<<dp[i]<<" ";
28+
}
29+
cout<<"\n";
30+
cout<<dp[n]<<"\n";
31+
}
32+
return 0;
33+
}

Path_In_A_Matrix.cpp

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
int cost[1000][1000];
4+
void solve(int n,int cost[][1000]){
5+
int dp[n][n];
6+
memset(dp,0,sizeof(dp));
7+
for(int i=n-1;i>=0;i--){
8+
for(int j=n-1;j>=0;j--){
9+
int down=(i==n-1)?0:dp[i+1][j];
10+
int down_left=(i==n-1 || j==0)?0:dp[i+1][j-1];
11+
int down_right=(i==n-1 || j==n-1)?0:dp[i+1][j+1];
12+
dp[i][j]= cost[i][j]+max(down,max(down_right,down_left));
13+
}
14+
}
15+
int ans=dp[0][0];
16+
for(int i=1;i<n;i++){
17+
ans=max(ans,dp[0][i]);
18+
}
19+
cout<<ans<<"\n";
20+
}
21+
int main(){
22+
int t;
23+
cin>>t;
24+
while(t--){
25+
int n;
26+
cin>>n;
27+
for(int i=0;i<n;i++){
28+
for(int j=0;j<n;j++){
29+
cin>>cost[i][j];
30+
}
31+
}
32+
solve(n,cost);
33+
}
34+
}

a.out

-12.5 KB
Binary file not shown.

0 commit comments

Comments
 (0)