You are on page 1of 15

~ BRUTE FORCE

#include <bits/stdc++.h>
using namespace std;

int main(){
int a[]={-2 , 11, -4, 13, -5 ,2};
int n= 6;
int maxSum = INT_MIN;
for(int i=0 ;i<=n-1;i++){
int sum=0;
for(int j=i ; j<n;j++){
sum +=a[j];
if(sum > maxSum) maxSum = sum;
}
}
cout<<"Trong luong day con lon nhat = "<<maxSum<<endl;
return 0;
}

~ DYNAMIC PROGRAMING

#include <bits/stdc++.h>

using namespace std;

int arr[]={-2 , 11, -4, 13, -5 ,2};


int n= 6;

void findSubArrayMax() {
int best = INT_MIN, sum = 0;
for (int i = 0; i < n; i++) {
sum = max(arr[i], sum + arr[i]);
best = max(best, sum);
}
cout << best << "\n";
}

void findSubArrayMaxWithIndices() {
int best = INT_MIN, sum = 0;
int best_start = 0, best_end = 0, current_start = 0;
for (int i = 0; i < n; i++) {
if (sum + arr[i] < arr[i]) {
current_start = i;
sum = arr[i];
} else {
sum += arr[i];
}

if (best < sum) {


best = sum;
best_start = current_start;
best_end = i;
}
}
cout << best << "\n";
cout << "start from " << best_start << " to " << best_end <<
"\n";
}

int main() {
findSubArrayMax();
findSubArrayMaxWithIndices();
}

~ Dãy con lớn nhất ngẫu nhiên

#include <bits/stdc++.h>
using namespace std;

int a[] = {-2 ,11 ,-4 ,13 ,-5 ,2};


int n=6;
/*void XuatMang(int a[],int n) {

printf("Cac phan tu da nhap vao la: \n");


int i;
srand(time(0));
for(i=0; i<n; i++) {
printf("%d , ",rand()%100);

}
}*/

void DuyetToanBo()
{

int maxSum = INT_MIN;


for(int i=0 ;i<=n-1;i++){
int sum=0;
for(int j=i ; j<n;j++){ sum +=a[j];
if(sum > maxSum) maxSum = sum;
}
}
cout<<"PP Duyet Toan Bo : Trong luong day con lon nhat =
"<<maxSum<<endl;

int maxLeft(int a[], int low , int mid)


{
int sum = 0, maxSum = INT_MIN;
for (int i = mid; i >= low; i--)
{
sum += a[i];
if (sum > maxSum) maxSum = sum;
}
return maxSum;
}

int maxRight(int a[], int mid1 ,int high)


{
int sum = 0, maxSum = INT_MIN;
for (int i = mid1 ; i <= high ; i++)
{
sum += a[i];
if (sum > maxSum) maxSum = sum;
}
return maxSum;
}

int maxSub(int a[], int low, int high)


{
if(low == high) return a[high];
else{
int mid = (low + high)/2;
int WL = maxSub(a,low,mid);
int WR = maxSub(a, mid+1, high);
int WM = maxLeft(a , low , mid) + maxRight(a , mid +
1,high);
return max(WL, max(WR ,WM));
}
}

void DeQuy()
//recursive
{
int maxSum = maxSub(a,0,n-1);
cout<<"PP De Quy : Trong luong day con lon nhat =
"<<maxSum<<endl;
}

void DynamicPrograming()
{
int ei = a[0];
int si = a[0];
for( int i = 1; i <= n-1 ; i++)
{
ei = max(a[i],a[i]+ei);
si = max(si,ei);
}
cout<<"Dynamic Programing : Trong luong day con lon nhat =
"<<si<<endl;
}
int main(){

// XuatMang(a, n);

clock_t startT = clock();


DuyetToanBo();
clock_t endT = clock();
cout<<"Thoi gian thuc hien Duyet toan bo = "<<(double ) (endT-
startT)/CLOCKS_PER_SEC<<"giay"<<endl;

cout<<"------------------------------------"<<endl;

clock_t starT1 = clock();


DeQuy();
clock_t endT1 = clock();
cout<<"Thoi gian thuc hien De Quy (recursive) = "<<(double)
(endT1-starT1)/CLOCKS_PER_SEC<<" giay "<<endl;

cout<<"------------------------------------"<<endl;

clock_t startT2 = clock();


DynamicPrograming();
clock_t endT2 = clock();
cout<<"Thoi gian thu hien Dynamic Programing = "<<(double)
(endT2-startT2)/CLOCKS_PER_SEC<<" giay"<<endl;
return 0;
}

~ Fibonaci( Recursion)

#include<stdio.h>
#include<iostream>

int F(int n)
{
if (n ==0 ) return 0;
if (n ==1 ) return 1;
return F(n-1) + F(n-2);
}

int main(){

printf("F(8) = %d" , F(8));


}
~ Path on grid
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

bool ok[1000][1000];
ll dp[1000][1000];

int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);

int n; cin >> n;


for(int i = 0; i < n; i++) {
string s;
cin >> s;
for(int j = 0; j < n; j++) {
if(s[j] == '.') ok[i][j] = true;
else ok[i][j] = false;
}
}

dp[0][0] = 1;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(!ok[i][j]) dp[i][j] = 0;
else {
if(i > 0) dp[i][j] += dp[i - 1][j];
if(j > 0) dp[i][j] += dp[i][j - 1];
dp[i][j] %= 1000000007;
}
}
}

cout << dp[n - 1][n - 1] << "\n";

return 0;
}

// C++ code to find number of unique paths


// in a Matrix
#include<bits/stdc++.h>
using namespace std;

int UniquePathHelper(int i, int j, int r, int c,


vector<vector<int>& A){
// boundary condition or constraints
if(i == r || j == c){
return 0 ;
}

if(A[i][j] == 1){
return 0 ;
}

// base case
if(i == r-1 && j == c-1){
return 1 ;
}

return UniquePathHelper(i+1, j, r, c, A) +
UniquePathHelper(i, j+1, r, c, A) ;
}

int uniquePathsWithObstacles(vector<vector<int>>& A)
{

int r = A.size(), c = A[0].size();

return UniquePathHelper(0, 0, r, c, A) ;
}

// Driver code
int main()
{
vector<vector<int>> A = { { 0, 0, 0 },
{ 0, 1, 0 },
{ 0, 0, 0 } };

cout << uniquePathsWithObstacles(A) << " \n";


}

~ Recursion

#include<stdio.h>
#include<iostream>

using namespace std; // tich cac so tu mang cho truoc

int size;
int helperProd(int list[],int k)
{
//base case:
if( k == size -1)
return list[k];
else //Recursive case:
return helperProd(list, k+1)*list[k];
}

int main(){

int list[] = { 6 ,7 ,8 ,9};


size =4;
printf("Product = %d ",helperProd(list , 0));

~ Recursion tính tổng

#include<bits/stdc++.h>

using namespace std;

int A[] = {6, 7, 8, 9 , 10};


int n = 5;

//cach 1
int sum(int list[], int k) {
if ( k==n-1 ){
return A[k];

}
return list[k] + sum(list, k+1);
}

//cach 2
/*int sum2( int list[], int k)
{
if( k = 0){

return A[0];
}
return sum2(A , k-1) + A[k] ;

} */

int main(){
cout <<"Tong can tinh = " << sum(A, 0) << endl;
cout <<"---------------"<<endl;
}

~ Palindrome

#include<stdio.h>

int Palindrome(int start, int end, char str[]){


if (start >= end) return 1;
else{
if (str[start] == str[end]) return Palindrome(start +
1, end -1 , str);
else return 0;
}
}

int main(){
int n = 5;
char str[5] = "abcba";
printf("%d" , Palindrome( 0 , n-1 , str));

~ Hanoi Town

#include<bits/stdc++.h>
using namespace std;

void HanoiTower (int ,char ,char ,char);


int i=0;

void HanoiTower(int n, char start, char finish, char spare)


{
if ( n ==1 )

{i++;
cout<<i<<" Dich chuyen dia tu coc: "<<start<<" den coc:
"<<finish<<endl;
}
else{
HanoiTower (n-1, start, spare, finish);
HanoiTower (1, start,finish,spare);
HanoiTower (n-1, spare,finish, start);
}
}
int main()
{ int n;
printf("Nhap n = "); scanf("%d",&n);
HanoiTower(n,'a' , 'b' , 'c');
cout<<"Tong so lan di chuyen dia = "<<i<<endl;
return 0;
}

~ Liệt kê hoán vị 1
#include<stdio.h>

int a[100];
int n,m;

int check(int y, int k) // trong C++ moi co ham bool


{
// return 1 if y != (a[1],a[2],a[3],...,a[k-1])
// return 0 otherwise
int j;
for ( j = 1; j <=k ; j++)
if (y == a[j]) return 0;
return 1;
}

void Record()
{
//printf out solutsion
int i;
for (i=1 ; i<=n; i++ ) printf(" %d ",a[i]);
printf("\n");
}
void Try(int k)
{ //Sk = {1,2,3,..n} \ {a[1], a[2], ... a[k-1]
for (int y = 1; y<=n ; y++)
if (check(y,k) == 1)
{
a[k] = y;
if (k == n) Record();
else Try(k+1);

}
}
int main()
{
n = 4; Try(1); // xay dung thanh phan dau tien cua loi giai
}

~ Liệt kê hoán vị 2
#include<stdio.h>
int a[100],n,m,used[100];

void Record(){
int i;
for(i=1;i<=n;i++) printf("%d ", a[i]);
printf("\n");
}

int check(int y,int k){


int j;
for(int j=1;j<=k;j++){
if(y==a[j]) return 0;
}return 1;
}
void Try(int k){
for(int y=1;y<=n;y++){
if (used[y]==0){
a[k]=y;
used[y]=1;
if (k==n) Record();
else Try(k+1);
used[y]=0;
}
}
}

int main(){
n=4;
for(int i=1;i<=n;i++) used[i]=0;
Try(1);
}

~ Liệt kê xâu nhị phân

#include<stdio.h>

int a[100];
int n;

void Record()
{
//printf out solutsion
int i;
for (i=1 ; i<=n; i++ ) printf(" %d",a[i]);
printf("\n");
}
void Try(int k)
{ //Sk = {0,1}
for (int y = 0; y<=1 ; y++)
{
a[k] = y;
if (k == n) Record();
else Try(k+1);

}
}

int main()
{
n = 5; Try(1); // xay dung thanh phan dau tien cua loi giai
}

~ Liệt kê tập con

#include<stdio.h>

int a[100];
int n,m;

void Record()
{
//printf out solutsion
int i;
for (i=1 ; i<=m; i++ ) printf(" %d ",a[i]);
printf("\n");
}
void Try(int k)
{ //Sk={ a[k-1]+1, a[k-1] +2,...., n-m+k}
for (int y = a[k-1]+1; y<=n-m+k ; y++)
{
a[k] = y;
if (k == m) Record();
else Try(k+1);

}
}
int main()
{
n = 6; m=4 ; Try(1); // xay dung thanh phan dau tien cua loi
giai
}

~ Quay lui

#include<stdio.h>

int a[100];
int n;

void Record()
{
//printf out solutsion
int i;
for (i=1 ; i<=n; i++ ) printf("%d ",a[i]);
printf("\n");
}
void Try(int k)
{
for (int y = 0; y<=1 ; y++)
{
a[k] = y;
if (k == n) Record();
else Try(k+1);

}
}

int main()
{
n = 3; Try(1); // xay dung thanh phan dau tien cua loi giai
}

#include<stdio.h>

int main(){
int A[] = { 5, 10, 12, 15 ,4};
int rows=5;
printf(" address contents\n");
for ( int i = 0; i < rows ; i++)
printf(" %8u %5d\n", &A[i] , A[i]);

#include<stdio.h>
#include<iostream>
using namespace std;

void Delete( int S[] , int i , int n){


for (int k = i; k<=n-2;k++) S[k] = S[k+1];

}
int main()
{
int A[] = {1 , 2 ,3 ,4, 10};
int n =5;
int i=3;
Delete(A , i , n);
n = n-1;
for (int k = 0; k <=n ;k++)
cout<<A[k]<<" ";
}

You might also like