-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCONSTRAINED_SUBSEQUENCE_SUM.c
142 lines (86 loc) · 2.41 KB
/
CONSTRAINED_SUBSEQUENCE_SUM.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// Constrained Subsequence Sum - Leetcode 1425
#include <stdio.h>
#define C 5 // 3
int doit(int A[C],int k){
int maxx = -1111;
if(k == 1){
for(int i = 0; i < C ; i++) {
if (A[i] > maxx) {
maxx = A[i];} return maxx ; }}
int cn = 0;
int cc = 0;
for(int i = 0; i < C ; i++) {
cc += 1 ;
if (A[i] > 0 ){
cn+=1 ;
if(cn == 1 && cc == C){
return A[i];}}}
k -=1 ;
int AC[C][C];
for(int i = 0; i < C ; i++) {
for(int ii = 0; ii < C ; ii++) {
AC[i][ii] = 0;
}}
for(int jj = 0; jj < 1 ; jj++) {
for(int i = 0; i < C ; i++) {
for(int j = 0; j < C ; j++) {
AC[i+ C * jj][j] = A[j] ;
}}}
for(int i = 0; i < C ; i++) {
for(int kk = 0; kk < k ; kk++) {
int cnt = 0;
for(int move = 0; move < kk + i + 1 ; move++) {
if(move < C ){
AC[ i ][move] = 0 ;
cnt+=1 ;
}}}}
for(int i = 1; i < C ; i++) {
for(int j = 0; j < i ; j++) {
AC[i][j] = A[j] ;}}
int RR;
RR = C - k + 1 ;
int ACC[RR][C];
for(int i = 0; i < RR ; i++) {
for(int j = 0; j < C ; j++) {
ACC[i][j] = AC[i][j];
}}
int B[C][C - k + 1];
for (int i = 0; i < C; i++) {
for (int j = 0; j < C - k + 1; j++) {
B[i][j] = ACC[j][i];
}}
int idx = -1;
// Variable to store max sum
int maxSum = -999999;
// Traverse matrix column wise
for (int i = 0; i < RR; i++) {
int sum = 0;
// calculate sum of column
for (int j = 0; j < C; j++) {
sum += B[j][i];
}
// Update maxSum if it is less than
// current sum
if (sum > maxSum) {
maxSum = sum;
// store index
idx = i;
}
}
return maxSum;}
int main() {
int A[C] = {10,2,-10,5,20}; // len 5 ANS 37
int k = 2;
printf( "%d", doit(A, k) );
printf("\n") ;
int nums1[3] = {-1,-2,-3} ; // ANS -1
int kk = 1 ;
printf( "%d", doit(nums1, kk) );
printf("\n") ;
int nums2[5] = {10,-2,-10,-5,20} ; // ANS 23
printf( "%d", doit(nums2, k) );
printf("\n") ;
int numm[5]={-1000,-2000,-3000,-4000,2}; // answer is 2 working on a shorter, better faster solution ANS 2
int ki=2 ;
printf( "%d", doit(numm, ki) );
}