DIỄN ĐÀN TOÁN TIN
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.



 
CỔNG ĐHQGHN  XEM ĐIỂM  Trang ChínhTrang Chính  Latest imagesLatest images  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
Bài gửi sau cùng
Bài gửiNgười gửiThời gian
Happy new year 2013 Sat Dec 29, 2012 3:45 pm
Lâu rùi anh không thấy chú nào vào diễn đàn nữa Mon May 07, 2012 9:26 am
Happy new year 2012. Mon Jan 30, 2012 5:05 am
[color=red]Tin "Cực Hot" cho tất cả các bạn và người thân[/color] Wed Oct 05, 2011 4:44 am
Cách đổi lịch âm dương Mon Oct 03, 2011 2:24 am
lâu lâu rùi không lên diễn đàn lớp mình chém gió Fri Sep 30, 2011 9:44 am
TRIỂN LÃM DU HỌC NHẬT BẢN 2010 Vừa học vừa làm thu nhập 1700USD/1 tháng Wed Sep 28, 2011 8:00 am
Vừa đi làm, vừa làm cộng tác viên kiếm tiền... Sun Aug 07, 2011 11:37 am
:(((((((((((((((((((((((((((((((((((((((((((((((((((((((( Sat Aug 06, 2011 5:05 am
Khánh thành website học tiếng anh của Chiến Fri Aug 05, 2011 10:30 am
Funy : Counter strike =)) Mon Jul 25, 2011 10:43 am
Lịch học hè Fri Jul 08, 2011 4:11 pm
Tổng hợp ảnh 24/06/2011 - Lễ tốt nghiệp Wed Jul 06, 2011 9:17 am
Câu lạc bộ tiếng anh của Chiến - cơ hội giao lưu người bản xứ Tue Jun 28, 2011 9:41 pm
[K52A3] CÔNG BỐ TÀI CHÍNH QUỸ LỚP (10/03/2011) Thu Jun 23, 2011 5:35 pm
[VPK] DANH SÁCH TỐT NGHIỆP CHÍNH THỨC Thu Jun 23, 2011 5:31 pm
[VPK] LỄ TRAO BẰNG TỐT NGHIỆP Wed Jun 22, 2011 11:59 am
Pic 21/06 (new and hot) Wed Jun 22, 2011 10:28 am
Gameloft Hà Nội tuyển dụng Mon Jun 20, 2011 8:18 pm
[ CTCTSV ] 21 THÁNG 6 ĐI LẤY HỒ SƠ TỐT NGHIỆP Sat Jun 18, 2011 9:38 am

 

 Tổng hợp một số bài CODE TKTT

Go down 
+6
*pepe*
BurNova
cuongcnb
dat_tn_89nd
chien2311
Che..vankhe
10 posters
Tác giảThông điệp
Che..vankhe
Đại Tổng Quản
Đại Tổng Quản
Che..vankhe


Tổng số bài gửi : 129
Sinh nhật : 09/07/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 4:01 am

Môn Đánh giá phân tích thuật toán - có rất nhiều bài toán và nhiều thuật toán .
Cơ bản là 5 loại :
- Quay lui vét cạn
- Nhánh cận
- Heuristic (pp tính gần đúng - đại diện là thuật toán Tham)

- Chia để trị
- Quy hoach động
Dưới đây , t muốn trình bày 1 số bài đã Code sẵn trên ngôn ngữ C, mọi người tham khảo mà sài
Nếu ai đã bit rùi thì thôi, ai chua bit thì đọc và cố gắng hiểu một chút , đề thi có thể biển đổi rất nhiều ...
Chúc cả nhà thi tốt :)

Chú ý : đây là Link của toàn bộ các bài dc giới thiệu, dc gói vào Folder này :
Tại đây
/*
Liet ke to hop chap k cua n phan tu
*/


Code:



#include
#include
#include

#define hs 50
int s[hs],n,k;
int x[hs],d=0;

char fi[]="To_Hop.INP" ;
char fo[]="To_Hop.OUT";

void Input()
{
    int tg =0 ;
    FILE *f = fopen(fi,"r");
    if(!f)
    {
          printf("\n\n Can't Open File ");
          getch();
          exit(0);
    }
    fscanf(f,"%d%d",&n,&k);
    for(int i=1;i<=n;i++)
        {
              fscanf(f,"%d",&tg);
              s[i] = tg;
        }
    fclose(f);
}
void Display_Input()
{
    printf("\n\nKich thuoc mang so  la  : %d \n",n);

    for(int i=1;i<= n;i++)
          printf("%4d",s[i]);
}
void printResult(FILE *f)
{
        d++;
        fprintf(f,"%2d)",d);
        for(int i=1;i<=k;i++)
          {
                fprintf(f,"%4d ",x[i]);               
                printf("%4d",x[i]);
            }
          fprintf(f,"\n");
          printf("\n");
}

void Attempt(int i,int t, FILE *f)
{
    for(int j=t; j<=n-k+i; j++)   
      { 
            x[i]=s[j];
            if(i==k) printResult(f);
            else Attempt(i+1,j+1,f);
      }
}

int main()
{
    x[0]=0;
    FILE *f= fopen(fo,"w");
    Input();
    Display_Input();
    printf("\n\n ket qua  : \n");
    Attempt(1,1,f);

    fclose(f);
    getch();
}



Được sửa bởi Che..vankhe ngày Sat May 29, 2010 5:02 am; sửa lần 2.
Về Đầu Trang Go down
Che..vankhe
Đại Tổng Quản
Đại Tổng Quản
Che..vankhe


Tổng số bài gửi : 129
Sinh nhật : 09/07/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Chỉnh hợp khong lap chập k của n   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 4:06 am

Chỉnh hợp ko lap chập k của n

Code:

/*
Liet ke Chinh hop ko lap  chap k cua n phan tu A[n,k]
*/

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

#define hs 50
int s[hs],n,k ;// mang s[] luu n phan tu ban dau
int x[hs],d=0; // mang x[] luu cac bo ket qua tim dc
int v[hs];    // mang v[] danh dau cac phan tu nao da dc chon rui 
char fi[]="Chinh_Hop.INP" ;
char fo[]="Chinh_Hop.OUT";

void Input()
{
    int tg =0 ;
    FILE *f = fopen(fi,"r");
    if(!f)
    {
          printf("\n\n Can't Open File ");
          getch();
          exit(0);
    }
    fscanf(f,"%d%d",&n,&k);
    for(int i=1;i<=n;i++)
        {
              fscanf(f,"%d",&tg);
              s[i] = tg;
              v[i] =0; // khoi tao cho amng danh dau  =0 --chua dc chon
        }
    fclose(f);
}
void Display_Input()
{
    printf("\n\nKich thuoc mang so  la  : %d \n",n);

    for(int i=1;i<= n;i++)
          printf("%4d",s[i]);
}
void printResult(FILE *f)
{
        d++;
        fprintf(f,"%2d)",d);
        for(int i=1;i<=k;i++)
          {
                fprintf(f,"%4d ",x[i]);               
                printf("%4d",x[i]);
            }
          fprintf(f,"\n");
          printf("\n");
}

void Attempt(int i, FILE *f)
{
    for(int j=1; j<=n; j++)
    if(v[j] == 0 ) // chua dc chon 
      { 
            x[i]=s[j];
            v[j] = 1;
            if(i==k) printResult(f);
            else Attempt(i+1,f);
            v[j] = 0; // bo chon
      }
}

int main()
{
    x[0]=0;
    FILE *f= fopen(fo,"w");
    Input();
    Display_Input();
    printf("\n\n ket qua  : \n");
    Attempt(1,f);

    fclose(f);
    getch();
}


Về Đầu Trang Go down
Che..vankhe
Đại Tổng Quản
Đại Tổng Quản
Che..vankhe


Tổng số bài gửi : 129
Sinh nhật : 09/07/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: chỉnh hợp LẶP chap k của n phần tử   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 4:21 am

chỉnh hợp LẶP chap k của n phần tử
Code:

/*
Liet ke Chinh hop  LAP  chap k cua n phan tu A[n,k]
*/

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

#define hs 50
int s[hs],n,k ;// mang s[] luu n phan tu ban dau
int x[hs],d=0; // mang x[] luu cac bo ket qua tim dc
char fi[]="Chinh_Hop_Lap.INP" ;
char fo[]="Chinh_Hop_Lap.OUT";

void Input()
{
    int tg =0 ;
    FILE *f = fopen(fi,"r");
    if(!f)
    {
          printf("\n\n Can't Open File ");
          getch();
          exit(0);
    }
    fscanf(f,"%d%d",&n,&k);
    for(int i=1;i<=n;i++)
        {
              fscanf(f,"%d",&tg);
              s[i] = tg;
        }
    fclose(f);
}
void Display_Input()
{
    printf("\n\nKich thuoc mang so  la  : %d \n",n);

    for(int i=1;i<= n;i++)
          printf("%4d",s[i]);
}
void printResult(FILE *f)
{
        d++;
        fprintf(f,"%2d)",d);
        for(int i=1;i<=k;i++)
          {
                fprintf(f,"%4d ",x[i]);               
                printf("%4d",x[i]);
            }
          fprintf(f,"\n");
          printf("\n");
}

void Attempt(int i, FILE *f)
{
    for(int j=1; j<=n; j++)
      { 
            x[i]=s[j];
            if(i==k) printResult(f);
            else Attempt(i+1,f);
      }
}

int main()
{
    x[0]=0;
    FILE *f= fopen(fo,"w");
    Input();
    Display_Input();
    printf("\n\n ket qua  : \n");
    Attempt(1,f);

    fclose(f);
    getch();
}


Về Đầu Trang Go down
Che..vankhe
Đại Tổng Quản
Đại Tổng Quản
Che..vankhe


Tổng số bài gửi : 129
Sinh nhật : 09/07/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: QHD : Tay -> Dong   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 4:25 am

Xếp Hậu :
Code:

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

#define N 8
int a[N+1],b[N*2+1],c[N*2+1],x[N+1];
FILE * f;
int d=0;
int init()
{
    f= fopen("OUTPUT.TXT","wa");
    for(int i=1;i<=N;i++) 
            a[i]=b[i]=c[i]=1; // cac vi tri deu tu do
    for(int i=N+1;i<=2*N;i++) 
              b[i]=c[i]=1;
    for(int i=1;i<=N;i++)
              x[i]=0;  // mang chua nghiem  .
}
void inNghiem()
{
    d++;
    fprintf(f,"\n Nghiem %2d: ",d);
    printf("\n Nghiem %2d: ",d);
    for(int i=1;i<=N;i++)
    {
            fprintf(f,"(%d,%d)  ",i,x[i]);
            printf("(%d,%d)  ",i,x[i]);
    }
}

void XepHau(int i)
{
    int k = 0;
    for(int j=1;j<=N;j++)
    {
            if(a[j]==1 && b[i+j]==1 && c[i-j+8]==1 )
            {
                        x[i]=j; // con hau hang i nam o cot j
                        a[j]=0;b[i+j]=0;c[i-j+8]=0;
                        if(i==N) // thong bao tim thay nghiem & in nghiem
                        {    inNghiem();
                              a[j]=b[i+j]=c[i-j+8]=1 ;
                        }
                        else 
                        {
                            XepHau(i+1);
                            a[j]=b[i+j]=c[i-j+8]=1 ;
                            x[i]=0;
                        }
            }
    }
   
}
int main()
{
    printf("\n\n  8 Con Hau");
    init();
    XepHau(1);
    fclose(f);
    getch();
}



Được sửa bởi Che..vankhe ngày Sat May 29, 2010 4:38 am; sửa lần 1.
Về Đầu Trang Go down
Che..vankhe
Đại Tổng Quản
Đại Tổng Quản
Che..vankhe


Tổng số bài gửi : 129
Sinh nhật : 09/07/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 4:37 am

QHD : Tay -> Dong
/*******************************************************************************************
* Input : Cho 1 bảng số a[][]
Yeu cau tim 1 duong di tu ben trai bang sang ben phai bang sao cho tong cac so
tren hanh trinh la lon nhat .
* Ouput : Tìm 1 đường đi từ cột 1 -> cột n : tổng các số trên đưởng di là MAX

Thuật toán QHD như sau
L[i][j] : là tổng lớn nhất cảu các đường đi từ cột 1 tới ô (i,j)
Ta có công thức QHD :
L[i][j] = a[i][j] + MAX { L[i-1][j-1],L[i][j-1],L[i+1][j+1] }
Cơ sở QHD :
L[i][1] = a[i][1] ; -- Tại cột đầu tiên thì tổng đường đi mới chỉ có a[i][1]
L[0][j] = L[n+1][j] = 0 ;
********************************************************************************************/

Code:

#include
#include
#include
#define hs 20
int a[hs][hs],L[hs][hs],v[hs][hs],m,n ;

char fi[]="Tay_Dong.INP" ;
char fo[]="Tay_Dong.OUT" ;

void Input()
{
    int tg =0 ;
    FILE *f = fopen(fi,"r");
    if(!f)
    {
          printf("\n\n Can't Open File ");
          getch();
          exit(0);
    }
    fscanf(f,"%d%d",&m,&n);
    for(int i=1;i<=m;i++)
      for(int j=1;j<=n;j++)
        {
              fscanf(f,"%d",&tg);
              a[i][j] = tg;
        }
    fclose(f);
}
void Display_Input()
{
    printf("\n\nKich co ma tran so da cho  la  : %dx%d \n",m,n);
    for(int i=1;i<=m;i++)
      for(int j=1;j<=n;j++)
        {
              if(j==1) puts("\n");
              printf("%4d",a[i][j]);
        }
}
void inkq()
{
    printf("\n\nKich co ma tran phuong an  L[][] la  : %dx%d \n",m,n);
    for(int i=1;i<=m;i++)
      for(int j=1;j<=n;j++)
        {
              if(j==1) puts("\n");
              printf("%4d",L[i][j]);
        }
}

int init()
{
    for(int i=1;i<=m;i++)  /// cot dau cua bang phuong an L[i][j] = a[i][j]
        L[i][1] = a[i][1] ;
    for(int j=0;j<=n;j++)  // co so QHD
        L[0][j] = L[n+1][j] = 0 ;
}
int max(int a,int b,int c,int *t)
{
    int Max = 0, i_max =0;
    if(a>b )
    {
          Max = a;
          *t=1;
    }
    else {
              Max = b;
              *t=2;
        }
    if(Max < c )
    {
          Max = c;
          *t=3;
    }
   
    return Max;

}
void QHD()
{
    int t=0;
    int i,j ;
    for( j=2;j<=n;j++) // duyet lan luot cac cot - ke tu cot 2
      for(i=1;i<=m;i++)    // duyet lan luot cac phan tu tren cot do
      {
           
              L[i][j] = a[i][j] + max(L[i-1][j-1], L[i][j-1], L[i+1][j-1],&t) ;
              v[i][j] = i-2 + t;
      }
       
}
void output()
{
    int s ,i,j,imax=1 ;
    s = a[1][n] ;
    int x[hs],d=0;
    for( i=1;i<=m;i++) // dyet cot cuoi cung
      if(s
      {
            s = L[i][n] ; 
            imax= i;
      }
    i =imax ;
    j = n;
    printf("\n\n Hanh trinh MAX tim dc la  : Tong MAX = %d\n\n ",L[i][j]);
    while(j>0)
      {
            d++;
            x[d] = a[i][j];
            i = v[i][j]  ;
            j--;   
      }
    for(i=d; i>1; --i)
      printf("%4d - ",x[i]);
    printf("%4d  ",x[i]);
}
int main()
{
    Input();
    Display_Input();
    init();
    QHD();
    inkq();
    output();
    printf("\n\nHello world \n");
    getch();
}

Về Đầu Trang Go down
chien2311
Enterprise Admin
Enterprise Admin
chien2311


Tổng số bài gửi : 1224
Sinh nhật : 23/11/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Bài toán cái túi Quy Hoạch Động   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 6:28 am

Góp vui phát :))

Code:

// Bai toan cai tui
// So luong do vat la n
// a[i] la trong luong do vat, c[i] la gia tri do vat
// w la trong luong co the chua dc cua tui
// L[i][j] la gia tri cua tui khi khoi luong la j va xet xong do vat i

#include <stdio.h>
#include <conio.h>

int a[100], c[100], n;
int L[100][1000];
int w;
FILE *fi,*fo;
char f1[]="caituiinput.txt";
char f2[]="caituioutput.txt";

void input()
{
    fi=fopen(f1,"r");
   
    if (fi)
    {
            fscanf(fi,"%d%d",&n,&w);
            for (int i=1;i<=n;i++)
                    fscanf(fi,"%d%d",&a[i],&c[i]);
        }
    fclose(fi);
 }
 
 int max(int x,int y)
 {
      return x>y?x:y;
  }
 
 void solve()
 {
      int i,j;
      // khoi tao L
      for (i=0;i<=n;i++)
          for (j=0;j<=w;j++)
              L[i][j]=0;
     
      // fix L
      for (i=1;i<=n;i++)
          for (j=1;j<=w;j++)
              {
                if (a[i]<=j) L[i][j]=max(L[i-1][j],L[i-1][j-a[i]]+c[i]);
                else        L[i][j]=L[i-1][j];
              }
  }
 
 void output()
 {
      int vmax, v;
      int i,j;
     
      fo=fopen(f2,"w+");
     
      if (fo)
      {
            vmax=0; // max value = 0
            v=0;    // trong luong cua tui khi dat max value
           
            // tim ra max value voi trong luong < w
            for (j=1;j<=w;j++)
                if (vmax<L[n][j])
                    {
                      vmax=L[n][j];
                      v=j;
                      }
            j=v;
            // save to file
            fprintf(fo,"%d\n",vmax);
            for (i=n;i>=1;i--)
                if (L[i][j]!=L[i-1][j]) // khi ma i dc cho vao tui
                    {
                      fprintf(fo,"%d% 4d% 4d\n",i,a[i],c[i]);
                      j=j-a[i];
                      }
        }
      fclose(fo);
  }
 
  int main()
  {
      input();
      solve();
      output();
     
      printf("ok !");
      getch();
  }

Về Đầu Trang Go down
chien2311
Enterprise Admin
Enterprise Admin
chien2311


Tổng số bài gửi : 1224
Sinh nhật : 23/11/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 6:31 am

Thêm phát nữa cho máu : :-p Khoảng cách xâu

Code:

// Bien doi xau - tim khoang cach giua hai xau
// X, Y la hai xau cho truoc, tim khoang cach hai xau nay
// L[i][j] la khoang cach giua hai xau con x[]1..i] va y[1..j]
// Neu xi=yj thi L[i,j]=L[i-1,j-1]
// Neu xi!=yj thi : L[i][j]=min(L[i-1][j]+1,L[i][j-1]+1,L[i-1][j-1]+1);
// Khoi tao L[i,0]=i; i : 0-> M
// Khoi tao L[0,j]=j; j : 0-> N
// L[m][n] la khoang cach can tim
// Neu xi=yj thi giam i va j, neu nguoc lai thi L[i][j]=L[i-1][j]+1

#include <stdio.h>
#include <conio.h>
#include <string.h>

char s1[100],s2[100];
int len1, len2;
int L[100][100];
FILE *fi,*fo;
char f1[]="kcxinput.txt";
char f2[]="kcxouput.txt";

void input()
{
    fi=fopen(f1,"r");
   
    if (fi)
    {
            fscanf(fi,"%s%s",&s1,&s2);
            len1=strlen(s1);
            len2=strlen(s2);
        }
    fclose(fi);
 }
 
 int min(int x,int y,int z)
 {
    int t=x<y?x:y;
    return t<z?t:z;
 }
 
 int nh(int i,int j) // khoang cach hia hai xau con co do dai i va j
 {
    if (s1[i]==s2[j]) L[i][j]=L[i-1][j-1];
    else L[i][j]=min(L[i-1,j]+1,L[i][j-1]+1,L[i-1][j-1]+1);
    return L[i][j];
 }
 
 void process()
 {
      int i.j;
      int phu[100];
      int count;
     
      i=len1;
      j=len2;
      count=0;
      fo=fopen(f2,"w+");
     
      if (fo)
      {
      while(i>0&&j>0) // thuc hien neu chua bien doi xong
      {
          if (s[i]=s[j]) { i--; j-- }
          else
            {
              count++; // so cho can bien doi
              if (L[i][j]==L[i-1][j-1]+1) // phep thay the
                  {
                    fprintf(g,"R  %d  %d\n",i,a[j]);
                    i--; j--;
                  }
              else
                  {
                  if (L[i][j]==L[i-1][j]+1) // phep xoa
                  {
                      fprintf(g,"D  %d\n",i);
                      i--;
                  }
                  else
                      if (L[i][j]=L[i][j-1]+1) // phep chen
                      {
                        fprintf(g,"I  %d  %d\n",i+1,s2[j]);
                      }
                  }
            }
      }  // end of while
     
      while (j>0)
            {
                  fprintf(g,"I  %d  %d\n",1,s2[j]);
                  i--;
                  count++;
            }   
     
      while(i>0)
                {
                  fprintf(g,"D  %d\n",i);
                  i--;
                  count++;
                }
     
      fprintf(g,"%d",count);
      }
      fclose(fo);
  }
 
  int main()
  {
      input();
     
      for (int i=0;i<=len1;i++)
          for (int j=0;j<=len2;j++)
              L[i][j]=0;
             
      for (int i=0;i<=len1;i++)
          for (int j=0;j<=len2;j++)
              L[i][j]=nh(i,j);
      process();
     
      printf("ok!");
      getch();
  }



Về Đầu Trang Go down
dat_tn_89nd
Quan Chi Phủ
Quan Chi Phủ
dat_tn_89nd


Tổng số bài gửi : 44
Sinh nhật : 17/12/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 9:00 am

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define true 1
#define false 0
int n,k;
int *a,*c;
void khoitao()
{
printf("n:= "); scanf("%d",&n);
printf("k:= "); scanf("%d",&k);
a=(int *)calloc(n,sizeof(int));
c=(int *)calloc(n,sizeof(int));
for(int i=1;i<=n;i++)
*(c+i)=true;
}
void PrintResult()
{
int i;
for(i=1;i<k;i++)
printf("%3d , ",*(a+i));
printf("%3d\n",*(a+k));
}
void Try(int i)
{
int j;
for(j=1;j<=n;j++)
if(*(c+j)==true)
{
*(a+i)=j;
if(i==k)
PrintResult();
else
{
*(c+j)=false;
Try(i+1);
*(c+j)=true;
}
}
}
int main()
{
khoitao();
Try(1);
getch();
}
Về Đầu Trang Go down
cuongcnb
Đại Tổng Quản
Đại Tổng Quản
cuongcnb


Tổng số bài gửi : 91
Sinh nhật : 22/12/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 6:10 pm

Chào các bạn. Thấy mọi người bàn tán sôi nổi quá. Mình rất cảm on các bạn. Nhân đây mình xin đóng góp bài Độ lệch của dãy số sử dụng thuật toán chia để trị

THuật giải sơ lược như sau

Diff(i, j) = max {diff(i,k); diff(k, j) ; Max[k, j] - Min [i, k]}

Trong đó k = [(i+j)/2],
Max[i, j] là số lớn nhất trong đoạn từ i tới j
Min[i, j] là số nhỏ nhất trong đoạn từ i tới j

Chương trình:
Code:

/*
        Chuong trinh tinh do lech cua day so
       
        Bai toan: Diff(A)= max{aj- ai, 1<= i <= j<= n}
*/

#include iostream


using namespace std;
int a[100];
int n;
int Max[100][100];
int Min[100][100];

int enter()
{
    int i;
    scanf("%d", &n);
    for(i=0; i
      scanf("%d", &a[i]);
    return n;
}

int getMin(int first, int last)
{
    int i;
    int min= a[first];
    for(i = first + 1; i <= last; i ++)
      if(a[i] < min)
          min= a[i];
   
    return min;
}

int getMax(int first, int last)
{
    int i;
    int max= a[first];
    for(i = first + 1; i <= last; i ++)
      if(a[i] > max)
          max= a[i];
   
    return max;
}

void min_max()
{
    int i, j;
    for(i = 0; i < n; i ++)
      for(j = i; j < n; j++)
          {
            Max[i][j]= getMax(i, j);
            Min[i][j]= getMin(i, j);
          }
}

int chooseMax(int x, int y, int z)
{
    int max= x;
    if(max < y)max = y;
    if(max < z)max = z;
    return max;
}

int diff(int first, int last)
{
    if(first == last)return 0;
    else if(last - first == 1)return a[last] - a[first];
    else {
                int mid= (first + last)/2;
                return chooseMax(diff(first, mid), diff(mid, last),
                                          Max[mid][last] - Min[first][mid]);
        }
}

int main()
{
    freopen("diff.inp","r", stdin);
    n= enter();
    min_max();
    int result= diff(0, n-1);
    cout<
    system("pause");
   
}


Được sửa bởi cuongcnb ngày Sun May 30, 2010 9:31 pm; sửa lần 1.
Về Đầu Trang Go down
cuongcnb
Đại Tổng Quản
Đại Tổng Quản
cuongcnb


Tổng số bài gửi : 91
Sinh nhật : 22/12/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 7:29 pm

Có ai biết đề của bài toán lát nền không. Tìm mãi mà chẳng thấy đề bài.
Về Đầu Trang Go down
BurNova
Trạng Nguyên
Trạng Nguyên
BurNova


Tổng số bài gửi : 8
Sinh nhật : 18/11/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySat May 29, 2010 9:59 pm

Trong danh sach bai tap co bai 30 la 1 bai lat nen day. Lat gach search google dc nhieu hon. Ko co Unikey
Về Đầu Trang Go down
*pepe*
Quan Nhị Phẩm
Quan Nhị Phẩm
*pepe*


Tổng số bài gửi : 112
Sinh nhật : 02/03/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 9:37 am

Các pác xem 2 bài này nè,thi sẽ vào...hoho...Nam nhi đại trượng phu nói 1 là 1...2 là...3...haha

/*
De bai:
Cho 2 day X (M phan tu) va Y (n phan tu)
Tim day con chung dai nhat cua 2 day

Input:
M
X[1]...X[M]
N
Y[1]...Y[N]

Output:
K - do dai day con dai nhat
Day con chung dai nhat
*/
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#define INPUT_FILE "DayConChungDaiNhat.txt"
int n,m,C[100][100],X[100],Y[100];
void docDuLieu(){
FILE *file;
file = fopen(INPUT_FILE, "r");

if(file != NULL){
fscanf(file,"%d", &m);
for(int i=1; i<=m; i++)
fscanf(file, "%d", &X[i]);
fscanf(file, "%d", &n);
for(int i=1;i<=n;i++)
fscanf(file, "%d", &Y[i]);
}
else{
puts("Khong tim thay file!");
getch();
exit(0);
}
}
void inDuLieu(){
puts("Day X:");
for(int i=1; i<=m; i++)
printf("%d ", X[i]);
puts("");

puts("Day Y:");
for(int i=1; i<=n; i++)
printf("%d ", Y[i]);
puts("");

}
void BangPhuongAn()
{
int i,j;
for(i=0;i<=m;i++)
C[i][0]=0;
for(j=0;j<=n;j++)
C[0][j]=0;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
if(X[i]==Y[j])
C[i][j]=C[i-1][j-1]+1;
else {
C[i][j]=C[i-1][j];
if(C[i][j-1]>C[i-1][j])
C[i][j]=C[i][j-1];
}
}
}
void TruyVet()
{
int i,j;
i=m;
j=n;
while(i>0&&j>0){
if(X[i]==Y[j]){
printf("%6.1d",X[i]);
i=i-1;j=j-1;
}
else {
if(C[i-1][j]>C[i][j-1])
i=i-1;
else j=j-1;
}
}
}
int main()
{
int i,j;
docDuLieu();
inDuLieu();
BangPhuongAn();
printf("Do dai day con chung dai nhat la: %d \n",C[m][n]);
if(C[m][n]>0){
printf("Day con chung dai nhat la (in nguoc tu cuoi len): \n");
TruyVet();
}
else
puts("Hai day khong co day con chung !");
getch();
return 0;
}
//////////////////////Xếp ba lô///////////////////
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define INPUT_FILE "XepBaLo01.txt"
int n, w, c[50][50], p[100], v[100] ;
void docDuLieu(){
FILE *file;
file = fopen(INPUT_FILE, "r");
if(file != NULL){
fscanf(file, "%d", &n);
for(int i=1; i<=n; i++){
fscanf(file, "%d %d", &p[i], &v[i]);
}
fscanf(file, "%d", &w);
}
else{
puts("Khong tim thay file!");
getch();
exit(0);
}
}
void inDuLieu(){
for(int i=1; i<=n; i++){
printf("Vat thu %d: (%d, %d)\n", i, p[i], v[i]);
}
printf("Gioi han cua ba lo: %d\n\n", w);
}
void dungBangPhuongAn(){
for(int i=0; i<=n; i++){
c[i][0]=0;
}
for(int j=0; j<=w; j++){
c[0][j]=0;
}

for(int i=1; i<=n; i++){
for(int j=1; j<=w; j++){
c[i][j] = c[i-1][j];
if(p[i]<=j){
if(c[i-1][j-p[i]]+ v[i] > c[i][j] ){
c[i][j]= c[i-1][j-p[i]]+v[i];
}
}
}
}
}
void truyVet(){
int i=n, j=w;
if(c[n][w]>0){
while(i>0&& j>0){
if(c[i][j]==c[i-1][j-p[i]]+v[i]){
printf("Su dung vat thu %d: (%d, %d) \n", i, p[i], v[i] );
j-=p[i];
}
i--;
}
}
printf("Gia tri lon nhat la: %d\n", c[n][w]);
}
int main(){
docDuLieu();
inDuLieu();
dungBangPhuongAn();
truyVet();

puts("Hoan thanh!");
getch();
return 0;
}
Về Đầu Trang Go down
chien2311
Enterprise Admin
Enterprise Admin
chien2311


Tổng số bài gửi : 1224
Sinh nhật : 23/11/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 9:39 am

=)) không thi vào dãy con chung dài nhất đâu, đề cương không có bài này mà =))
Về Đầu Trang Go down
*pepe*
Quan Nhị Phẩm
Quan Nhị Phẩm
*pepe*


Tổng số bài gửi : 112
Sinh nhật : 02/03/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 9:44 am

QHD có 4 bài thì nó là 1 trong 4 bài đó...kakaka

Tiên đoán...sẽ vào bài
1.Xâu ABC(Nhánh cận).
2.Ba lô(QHD).
3.Xâu con chung dài nhất(QHD).

Lý thuyết vào Quay lui hoặc Tham Lam....Hôm qua mới đi uống rượu với thày xong...kakakaka
Về Đầu Trang Go down
cuongcnb
Đại Tổng Quản
Đại Tổng Quản
cuongcnb


Tổng số bài gửi : 91
Sinh nhật : 22/12/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 10:04 am

sao lung tung hết cả vậy. Cho để nằm trong đề cương chứ. Nếu chắc chắn thì post lên nha. Còn theo đề cương thì có 2 bài. Một lý thuyết và một bài tập. Trong đó bài tập nào cũng quan trọng vào xác xuất vào như nhau
Về Đầu Trang Go down
cuongcnb
Đại Tổng Quản
Đại Tổng Quản
cuongcnb


Tổng số bài gửi : 91
Sinh nhật : 22/12/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 10:16 am

Hôm nay tớ post bài toán sắp xếp trộn cho các bạn. Về ý
tưởng thì các bạn tìm trực tiếp trên mạng. Tớ chỉ nói sơ qua thuật toán thôi.
Tất nhiên là sử dụng pương pháp chia để trị rùi.
Ý tưởng: Mỗi đoạn (i,j) ta chia đôi đoạn đó ra và thực hiện trên 2 đoạn con đó, sau khi thực hiện ta ghép 2 đoạn vào 1 theo hướng phần tử bé hơn đứng trước, phần tử lớn hơn đứng sau.


Chương trình:
Code:

/*
    Chuong trinh sap xep chon
*/

#include"iostream"


using namespace std;

int a[100];
int n;

int c[100];

int enter()
{
    int i;
    cin>>n;
    for(i = 0; i < n; i ++)
      cin>>a[i];
    return n;
}

void merge(int first, int mid, int last)
{
    int b[100];
    int k=first;
    int i= first, j= mid + 1;
    while(i <= mid && j <= last)
        {
            if(a[i] < a[j])
              b[k++]= a[i++];
            else
              b[k++]= a[j++];
        }
    if(i <= mid)
      for(int i1= i; i1 <= mid; i1 ++)
          b[k++]= a[i1];
    else
      for(int j1= j; j1 <= last; j1 ++)
          b[k++]= a[j1];
   
    for(i = first; i <= last; i ++)
        a[i] = b[i];
}

void mergeSort(int first, int last)
{
    if(first == last)return;
    else
      {
              int mid= (first + last)/2;
              mergeSort(first, mid);
              mergeSort(mid + 1, last);
              merge(first, mid, last);
      }
}

void show()
{
    int i;
    for(i = 0; i < n; i++)
      cout<<<"  ";
    cout<
}

int main()
{
    freopen("merge.inp", "r", stdin);
    n= enter();
    show();
    mergeSort(0, n-1);
    show();
    system("pause");
}


Về Đầu Trang Go down
pham_hanh
:)) Hàng khủng :))
:)) Hàng khủng :))
pham_hanh


Tổng số bài gửi : 167
Sinh nhật : 10/11/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 11:51 am

hihi, vào đây thấy toàn các "gia cát dự" dự đoán đề thi thui. :s17 ai có code mấy bài nhánh cận thì post cho mình tham khảo với :s14b
Về Đầu Trang Go down
dat_tn_89nd
Quan Chi Phủ
Quan Chi Phủ
dat_tn_89nd


Tổng số bài gửi : 44
Sinh nhật : 17/12/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 2:20 pm

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <io.h>

#define MAX 20

int n, P[MAX], B[MAX], C[20][20], count=0;
int A[MAX], XOPT[MAX]; // XOPT[] : Hanh trinh toi uu
int can, cmin, fopt; // fopt : chi phi toi uu

void Read_Data(void)
{
int i, j;
FILE *fp;
fp = fopen("NguoiDuLich.inp","r");
if (!fp) printf("\n Khong mo duoc file NguoiDuLich.inp");
fscanf(fp,"%d", &n);
printf("\n So thanh pho: %d", n);
printf("\n Ma tran chi phi:");
for (i=1; i<=n; i++)
{
printf("\n");
for(j=1; j<=n; j++)
{
fscanf(fp,"%d",&C[i][j]);
printf("%5d", C[i][j]);
}
}
fclose(fp);
}

int Find_C_Min(void)
{
int min=1000, i, j; //gan chi phi thap nhat la 1000
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if (i!=j && min>C[i][j])
min=C[i][j];
}
}
return(min);
}

void Init(void)
{
int i;
cmin=Find_C_Min();
fopt=32000;
can=0;
A[1]=1;
for (i=1;i<=n; i++)
B[i]=1;
}

void Result(void)
{
int i;
printf("\n\n Chi phi toi uu: %d", fopt);
printf("\n\n Hanh trinh:");
for(i=1; i<=n; i++)
printf("%3d ->", XOPT[i]);
printf(" %d",1);
}

void Swap(void)
{
int i;
for(i=1; i<=n;i++)
XOPT[i]=A[i];
}

void Update_Kyluc(void)
{
int sum;
sum=can+C[A[n]][A[1]];
if(sum<fopt)
{
Swap();
fopt=sum;
}
}

void Try(int i)
{
int j;
for(j=2; j<=n;j++)
{
if(B[j])
{
A[i]=j; B[j]=0;
can=can+C[A[i-1]][A[i]];
if (i==n) Update_Kyluc();
else if( can + (n-i+1)*cmin< fopt)
{
count++;
Try(i+1);
}
B[j]=1;
can=can-C[A[i-1]][A[i]];
}
}
}

int main()
{
printf("\n______________THUAT TOAN NHANH CAN________________");
printf("\n\n Bai toan: NGUOI GIAO HANG ");
printf("\n\n Mot nguoi can phai giao hang tai N thanh pho, voi chi phi di lai khac nhau");
printf("\n Tim hanh trinh thoa man: ");
printf("\n\t Di qua tat ca cac thanh pho. \n\t Moi thanh pho chi qua dung mot lan. \n\t Chi phi di lai la nho nhat");
printf("\n\n Bai giai:\n");
Read_Data();
Init();
Try(2);
Result();
getch();
}
Về Đầu Trang Go down
dat_tn_89nd
Quan Chi Phủ
Quan Chi Phủ
dat_tn_89nd


Tổng số bài gửi : 44
Sinh nhật : 17/12/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 2:21 pm

doc di roi co ma hieu :))
Về Đầu Trang Go down
pham_hanh
:)) Hàng khủng :))
:)) Hàng khủng :))
pham_hanh


Tổng số bài gửi : 167
Sinh nhật : 10/11/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 2:49 pm

thank con nhìu nhìu :)) . mà m phân tích luôn cả độ phức tạp đi :P
Về Đầu Trang Go down
HoangDaiCa
Quan Chi Huyện
Quan Chi Huyện
HoangDaiCa


Tổng số bài gửi : 35
Sinh nhật : 20/07/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 4:27 pm

Tình hình là ngoài mấy bài của thằng Nghĩa là chuẩn xác chắc là test trước khi gửi còn lại các bài khác có rất nhiều lỗi.Còn về vấn đề thi vào bài gì thì cứ phần nào tớ học nó sẽ không vào.Bây giờ tớ vẫn chưa học gì.
Về Đầu Trang Go down
cuongcnb
Đại Tổng Quản
Đại Tổng Quản
cuongcnb


Tổng số bài gửi : 91
Sinh nhật : 22/12/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 6:43 pm

Hoàng thân mến!
Hoàng nên đọc kỹ code một chút. Tớ biết là chắc chắn có người thắc mắc tại sao nó lại không chạy. Có những nguyên nhân sau
1. Phải có file input có tên trùng với tên chương trình đưa ra, hoặc đã có file input rùi nhưng chương trình của tớ xuất ra file output, chắc Hoàng không để ý.

2. Khi gửi bài một số ký tự đặc biệt không được trình duyệt show ra, chẳng hạn như ký tự mở ngoặc và đóng ngoặc nhọn, trình duyệt sẽ dịch nó là code html và hiển nhiên là không show lên được.
Để chạy được thì khai báo thư viện là iostream, các câu lệnh cout sửa một chút vì có ký tự đặc biệt khác
Về Đầu Trang Go down
chien2311
Enterprise Admin
Enterprise Admin
chien2311


Tổng số bài gửi : 1224
Sinh nhật : 23/11/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 6:51 pm

cuongcnb đã viết:
Hoàng thân mến!
Hoàng nên đọc kỹ code một chút. Tớ biết là chắc chắn có người thắc mắc tại sao nó lại không chạy. Có những nguyên nhân sau
1. Phải có file input có tên trùng với tên chương trình đưa ra, hoặc đã có file input rùi nhưng chương trình của tớ xuất ra file output, chắc Hoàng không để ý.

2. Khi gửi bài một số ký tự đặc biệt không được trình duyệt show ra, chẳng hạn như ký tự mở ngoặc và đóng ngoặc nhọn, trình duyệt sẽ dịch nó là code html và hiển nhiên là không show lên được.
Để chạy được thì khai báo thư viện là iostream, các câu lệnh cout sửa một chút vì có ký tự đặc biệt khác

oh yeah, đúng thế, code bị thay đổi khi post lên, chạy hay khong quan trọng gì, quan trọng là ý tưởng, mai thi trên giấy mà
Về Đầu Trang Go down
VoTienKhoangHau
Trạng Nguyên
Trạng Nguyên
VoTienKhoangHau


Tổng số bài gửi : 4
Sinh nhật : 10/10/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 7:08 pm

:)
AE cố gắng nhé, quyết tâm đạt điểm cao

phen này quyêt tâm ko gặp lại nao~ nghiện thuốc 'phiện' nữa :D
:s3'Tổng hợp một số bài CODE TKTT 450393 Tổng hợp một số bài CODE TKTT 450393 Tổng hợp một số bài CODE TKTT 450393
Tổng hợp một số bài CODE TKTT 380715 Tổng hợp một số bài CODE TKTT 380715 Tổng hợp một số bài CODE TKTT 380715 Tổng hợp một số bài CODE TKTT 380715
Về Đầu Trang Go down
chien2311
Enterprise Admin
Enterprise Admin
chien2311


Tổng số bài gửi : 1224
Sinh nhật : 23/11/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 7:40 pm

VoTienKhoangHau đã viết:
:)
AE cố gắng nhé, quyết tâm đạt điểm cao

phen này quyêt tâm ko gặp lại nao~ nghiện thuốc 'phiện' nữa :D
:s3'Tổng hợp một số bài CODE TKTT 450393 Tổng hợp một số bài CODE TKTT 450393 Tổng hợp một số bài CODE TKTT 450393
Tổng hợp một số bài CODE TKTT 380715 Tổng hợp một số bài CODE TKTT 380715 Tổng hợp một số bài CODE TKTT 380715 Tổng hợp một số bài CODE TKTT 380715

=)) =)) ok men
Về Đầu Trang Go down
HoangDaiCa
Quan Chi Huyện
Quan Chi Huyện
HoangDaiCa


Tổng số bài gửi : 35
Sinh nhật : 20/07/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 8:26 pm

Bài của cường viết bằng C++ thì tớ biết rùi có thể lúc chuyển sang C to chuyển sai 1 chỗ nào đó 3 năm ko sờ đến C++ mà.Còn Chiến xem lại hộ bài xâu cái hôm qua chạy 1 phát ra file txt 1,5gb =)) chưa đọc lại xem vì sao nữa.Tớ nghĩ là mai thi trên giấy thì ko cần chuẩn lắm thì đúng rồi nhưng pót bài trên mạng các bạn sẽ test và nếu thấy không đúng thì có thể sẽ không nghĩ là ý tưởng đó đúng .Bài Cường input output tớ làm khác mà còn cái lỗi nó thông báo tớ còn chẳng hiểu la cái lỗi gì cơ.
Về Đầu Trang Go down
chien2311
Enterprise Admin
Enterprise Admin
chien2311


Tổng số bài gửi : 1224
Sinh nhật : 23/11/1988

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 8:40 pm

ờ, bài cái túi mình test chạy ngon lành rồi, vài biến đổi xâu thì t code tren dev C, code vội vàng cho cho lên diễn đànm ý tương thì chính xác rồi, nhwung code chưa test ;))
Về Đầu Trang Go down
cuongcnb
Đại Tổng Quản
Đại Tổng Quản
cuongcnb


Tổng số bài gửi : 91
Sinh nhật : 22/12/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 9:38 pm

Nhân đây tớ xin đưa ra chương trình bài toán lát nền.
Đề bài như sau (câu 27):






Lát gạch: Cho một nên nhà hình vuông có
kích thước 2k bị khuyết một ô., hãy tìm cách lát nền nhà bằng
loại gạch hình thước thợ (lát được 3 ô cùng lúc).





Mình lấy thuật toán của bạn Lê
Hoàng Hải, lớp 10 chuyên tin, Đại học Khoa học Tự nhiên, ĐHQGHN và đã chuyển
hóa thuật toán thành chương trình.


Để phân biệt 2 viên gạch khác
nhau, ta sẽ đánh màu bằng số, ví dụ 2 viên gạch gần nhau ta sẽ cho viên thứ nhất
màu 1, viên thứ 2 màu 2.


Dễ dàng chứng minh được rằng chỉ
cần 3 màu 1, 2, 3 ta có thể tô hết.


Vì với n= 2^k nên mới có thuật
toán tốt, nếu các trường hợp khác phải dùng vét cạn.


Xét trường hợp đơn giản k=1, ô
vuông có độ dài bằng 2, ta chỉ cần lát một viên và còn thiếu một ô (thỏa mãn
bài toán)
Tổng hợp một số bài CODE TKTT 572274_0__10654_106_6025021





Với mỗi ô vuông với cạnh lớn hơn
2 ta sẽ chia ra làm 4 phần, trong đó phần đáy bên trái ta đã xây dựng, để xây dựng đáy phải và trên trái ta chỉ cần lật ngược nền và chuyển 1 thành 3 và 3 thành 1 (4 - a[i][j]). Còn trên phải thì ta tịnh tiến.

Lát lên trên:
Tổng hợp một số bài CODE TKTT 443414_0__10654_106_2706648

Lát sang phải
Tổng hợp một số bài CODE TKTT 518054_0__10654_106_4456862
Lát chéo:
Tổng hợp một số bài CODE TKTT 430374_0__10654_106_2329442



Bài toán lát nền:
Code:

#include
#include

using namespace std;
int n; // do dai cua nen nha
int a[101][101];  //mang luu vi tri cua o tren nen nha


void diagonal(int start)
{
    int i, j, v;
    v= n- start + 1;
    for(i = start; i <= n; i ++)
      for(j = 1; j <= v; j ++)
        a[i-v][j+v] = a[i][j];
}

void right(int start)
{
    int i, j, v, v2;
    v= n- start + 1;
    v2= 2*v;
    for(i = start; i <= n; i ++)
      for(j = 1; j <= v; j ++)
        a[i][v2 - j + 1] = 4 - a[i][j];
}

void up(int start)
{
    int i, j, v, v2;
    v= n- start + 1;
    v2= n - 2*v + 1;
    for(i = 0; i < v; i ++)
      for(j = 1; j <= v; j ++)
        a[v2+i][j] = 4 - a[n-i][j];
}

void fill(int start)
{
    if(n- start > 1)fill((n + start)/2 + 1);
    diagonal (start);
    up(start);
    right(start);
}

void init()
{
    a[n-1][1] = 1;
    a[n-1][2] = 2;
    a[n][1] = a[n][2] = 1;
}

void show()
{
    int i, j;
    for(i = 1; i <= n; i++)
      {
          cout<
          for(j = 1; j <= n; j ++)
            cout<<<"  ";
      }     
}

int main()
{   
    cin>>n;
    init();
    fill(n/2 + 1);
    show();
    getch();
}

Về Đầu Trang Go down
nguyenhien_hus
Quan Chi Huyện
Quan Chi Huyện
nguyenhien_hus


Tổng số bài gửi : 32
Sinh nhật : 16/10/1989

Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT EmptySun May 30, 2010 10:49 pm

Cam on Cuong!
Thuat toan nay don gian va de hieu! vay ma search tren mang chang thay dau ca! ah? chieu mai neu co the thi thi xong cho to hoi mot chut OTOMAT nha!
Thanks!
Về Đầu Trang Go down
Sponsored content





Tổng hợp một số bài CODE TKTT Empty
Bài gửiTiêu đề: Re: Tổng hợp một số bài CODE TKTT   Tổng hợp một số bài CODE TKTT Empty

Về Đầu Trang Go down
 
Tổng hợp một số bài CODE TKTT
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Xin chỉ giáo =.= (bài tập TKTT)
» Tổng hợp ảnh 24/06/2011 - Lễ tốt nghiệp
» Tổng hợp ảnh chụp trong máy của Phạm Hiền
» TongHua - Đồng Thoại - 童话 / Tong Hua - Fairy Tale
» Code Tổ Hợp chương 3, ACE góp ý nhé

Permissions in this forum:Bạn không có quyền trả lời bài viết
DIỄN ĐÀN TOÁN TIN :: CÁC VẤN ĐỀ CHUNG :: KÌ HỌC 2 NĂM THỨ III :: THIẾT KẾ & ĐÁNH GIÁ THUẬT TOÁN-
Chuyển đến 
Create a forum on Forumotion | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất