Lập trình, thuật toán
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.


Lập trình C/C++, java. Thuật toán
 
Trang ChínhLatest imagesTìm kiếmĐăng kýĐăng Nhập
Đăng Nhập
Tên truy cập:
Mật khẩu:
Đăng nhập tự động mỗi khi truy cập: 
:: Quên mật khẩu
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Latest topics
» Thông báo offline lần 1
Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeWed Dec 07, 2011 12:16 pm by dinhha

» Chưa hiểu rõ đề CONANSP và FSOFT
Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeMon Dec 05, 2011 1:53 pm by dinhha

» Thuật toán qui hoạch động (Dynamic programing)
Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeSun Dec 04, 2011 6:21 pm by letrongngoc

» Khởi động lại nào!
Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeThu Dec 01, 2011 11:54 am by TrungHieu11

» Bài tập tuần 1 của Hưng cùi bắp
Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeMon Nov 07, 2011 10:37 pm by TrungHieu11

» Codeforces Beta Round #93
Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeSat Nov 05, 2011 12:23 am by TrungHieu11

» Mở thêm thư mục "Các môn học ở trường"
Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeThu Nov 03, 2011 3:05 pm by TrungHieu11

» code bài 1
Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeMon Oct 31, 2011 7:42 pm by TrungHieu11

» Báo cáo lý lịch
Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeMon Oct 31, 2011 6:39 pm by fallinlove2011

Top posters
TrungHieu11
Thuật toán qui hoạch động (Dynamic programing) I_vote_lcapThuật toán qui hoạch động (Dynamic programing) I_voting_barThuật toán qui hoạch động (Dynamic programing) I_vote_rcap 
fallinlove2011
Thuật toán qui hoạch động (Dynamic programing) I_vote_lcapThuật toán qui hoạch động (Dynamic programing) I_voting_barThuật toán qui hoạch động (Dynamic programing) I_vote_rcap 
dinhha
Thuật toán qui hoạch động (Dynamic programing) I_vote_lcapThuật toán qui hoạch động (Dynamic programing) I_voting_barThuật toán qui hoạch động (Dynamic programing) I_vote_rcap 
thenguyen27192
Thuật toán qui hoạch động (Dynamic programing) I_vote_lcapThuật toán qui hoạch động (Dynamic programing) I_voting_barThuật toán qui hoạch động (Dynamic programing) I_vote_rcap 
liveislife
Thuật toán qui hoạch động (Dynamic programing) I_vote_lcapThuật toán qui hoạch động (Dynamic programing) I_voting_barThuật toán qui hoạch động (Dynamic programing) I_vote_rcap 
lovestorm_6390
Thuật toán qui hoạch động (Dynamic programing) I_vote_lcapThuật toán qui hoạch động (Dynamic programing) I_voting_barThuật toán qui hoạch động (Dynamic programing) I_vote_rcap 
lehonghoa
Thuật toán qui hoạch động (Dynamic programing) I_vote_lcapThuật toán qui hoạch động (Dynamic programing) I_voting_barThuật toán qui hoạch động (Dynamic programing) I_vote_rcap 
letrongngoc
Thuật toán qui hoạch động (Dynamic programing) I_vote_lcapThuật toán qui hoạch động (Dynamic programing) I_voting_barThuật toán qui hoạch động (Dynamic programing) I_vote_rcap 

 

 Thuật toán qui hoạch động (Dynamic programing)

Go down 
4 posters
Tác giảThông điệp
TrungHieu11
Admin
Admin
TrungHieu11


Tổng số bài gửi : 52
Points : 102
Danh tiếng : 6
Join date : 15/10/2011
Đến từ : Đại học Công Nghiệp Tp.HCM

Thuật toán qui hoạch động (Dynamic programing) Empty
Bài gửiTiêu đề: Thuật toán qui hoạch động (Dynamic programing)   Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeSat Oct 22, 2011 10:55 pm

Qui hoạch động (Dynamic programing) là 1 trong những kĩ thuật được sử dụng rất nhiều trong các problems. Qui hoạch động dựa trên kĩ thuật quay lui bằng cách xây dựng các sub-solution từ các kết quả đã tìm kiếm trước đó. Độ phức tạp tốt hơn thuật toán quay lui rất nhiều.

VD 1: Nhập vào 1 số n (n <= 45) tìm số fibonacci thứ n;

Giải bằng đệ qui:
Code:
#include <cstdio>

using namespace std;
//Xay dung ham de qui tinh so fibonacci
int fibonacci(int i){
   if (i == 1 || i == 2) return 1;
   return fibonacci(i - 1) + fibonacci(i - 2);
}

int main(){
   int n;
   scanf("%d", &n);
   printf("%d", fibonacci(n));
}

Giải bằng thuật toán qui hoạch động:
Code:
#include <cstdio>

using namespace std;

int main(){
   int n, F[100];
   //Khoi tao 2 gia tri ban dau la F[1] = 1 va F[2] = 1
   F[1] = 1;
   F[2] = 1;
   for (int i = 3; i <= 50; i++)
      F[i] = F[i - 1] + F[i - 2];//F[i] duoc xay dung tu cac sub-solution la F[i - 1] va F[i - 2]
   scanf("%d", &n);
   printf("%d", F[n]); //Cuoi cung chi can xuat so thu F[n] la xong :D
}

Khi nhập n = 45 vào các bạn có thể thấy thuật toán đệ qui chạy rất lâu còn thuật toán DP chạy ra kết quả ngay.

VD 2: QBMAX (VNOI – SPOJ)

Đề bài:
Code:
Cho một bảng A kích thước m x n (1 <= m, n <= 100), trên đó ghi các số nguyên aij (|aij| <= 100). Một người xuất phát tại ô nào đó của cột 1, cần sang cột n (tại ô nào cũng được).

Quy tắc đi: Từ ô (i, j) chỉ được quyền sang một trong 3 ô (i, j + 1); (i - 1, j + 1); (i + 1, j + 1)

Input
Dòng 1: Ghi hai số m, n là số hàng và số cột của bảng.

M dòng tiếp theo, dòng thứ i ghi đủ n số trên hàng i của bảng theo đúng thứ tự từ trái qua phải

Output
Gồm 1 dòng duy nhất ghi tổng lớn nhất tìm được

Example
Input:
5 7
9 -2 6 2 1 3 4
0 -1 6 7 1 3 3
8 -2 8 2 5 3 2
1 -1 6 2 1 6 1
7 -2 6 2 1 3 7

Output:
41

Thuật toán: Qui hoạch động

Source code:
Code:
#include <cstdio>
#include <iostream>

using namespace std;

int main(){
   //Initial
   int n, m, A[105][105];
   //Input
   scanf("%d%d", &n, &m);
   for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++)
         scanf("%d", &A[i][j]);
   //Process
   int dp[105][105];
   for (int i = 1; i <= n; i++) dp[i][1] = A[i][1];//Khoi tao cac gia tri ban dau
   /*Mang dp hien tai:
   9 0 0 0 0 0 0
   0 0 0 0 0 0 0
   8 0 0 0 0 0 0
   1 0 0 0 0 0 0
   7 0 0 0 0 0 0
   */
   for (int j = 2; j <= m; j++)
      for (int i = 1; i <= n; i++){
         if (i == 1) dp[i][j] = max(dp[i][j - 1], dp[i + 1][j - 1]);
         else if (i == n) dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - 1]);
         else dp[i][j] = max(dp[i][j - 1], max(dp[i + 1][j - 1], dp[i - 1][j - 1]));
         dp[i][j] += A[i][j];
      }
   /*Mang dp sau khi xu li
   9 7 14 16 24 27 35
   0 8 14 23 24 31 34
   8 9 16 18 28 31 36
   1 7 13 18 19 34 35
   7 5 13 15 19 22 41
   */
   int maxVal = -10000;
   for (int i = 1; i <= n; i++) maxVal = max(maxVal, dp[i][m]);
   printf("%d", maxVal);//Gia tri max la 41
}

/*Example test:
Input:
5 7
9 -2 6 2 1 3 4
0 -1 6 7 1 3 3
8 -2 8 2 5 3 2
1 -1 6 2 1 6 1
7 -2 6 2 1 3 7

Output:
41
*/

Một số bài tập khác:
QBSTR
LIQ
LIS
VCOWFLIX
LATGACH
NKSGAME
NKTICK
LNACS


Được sửa bởi TrungHieu11 ngày Sun Oct 23, 2011 1:10 pm; sửa lần 1.
Về Đầu Trang Go down
https://olphui.forumvi.com
fallinlove2011
Đang tập code
Đang tập code
fallinlove2011


Tổng số bài gửi : 18
Points : 27
Danh tiếng : 0
Join date : 16/10/2011
Age : 31
Đến từ : Đại Học Công Nghiệp

Thuật toán qui hoạch động (Dynamic programing) Empty
Bài gửiTiêu đề: Re: Thuật toán qui hoạch động (Dynamic programing)   Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeSat Oct 22, 2011 11:15 pm

Thx anh trai nhiều.
Về Đầu Trang Go down
TrungHieu11
Admin
Admin
TrungHieu11


Tổng số bài gửi : 52
Points : 102
Danh tiếng : 6
Join date : 15/10/2011
Đến từ : Đại học Công Nghiệp Tp.HCM

Thuật toán qui hoạch động (Dynamic programing) Empty
Bài gửiTiêu đề: Re: Thuật toán qui hoạch động (Dynamic programing)   Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeSun Oct 23, 2011 1:06 pm

Các bạn cần phải đọc thêm các ebook mà mình đã post lên, trong đó có đầy đủ cả. Năm rùi mình cũng chỉ học trong các ebook và wikipedia (năm nay chuyển sang youtube nữa Basketball ). Có thắc mắc gì các bạn cứ post lên rùi cùng thảo luận. Về việc code bài thì bắt đầu từ tuần sau mình sẽ post những bài của mình đã code lên nhưng là những bài trong codeforces (vì mình đang luyện trên codeforces mà santa ).
Về Đầu Trang Go down
https://olphui.forumvi.com
lovestorm_6390
Đang tập code
Đang tập code



Tổng số bài gửi : 5
Points : 7
Danh tiếng : 0
Join date : 17/10/2011

Thuật toán qui hoạch động (Dynamic programing) Empty
Bài gửiTiêu đề: Re: Thuật toán qui hoạch động (Dynamic programing)   Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeSun Oct 23, 2011 10:52 pm

uhm cảm ơn anh nhiều nha.hi vọng qua khi luyện code nhiều em sẽ nâng cao dc kĩ thuật lập trình e thấy đôi lúc thuật toán thì mình biết mà kĩ thuật code còn tệ quá
Về Đầu Trang Go down
TrungHieu11
Admin
Admin
TrungHieu11


Tổng số bài gửi : 52
Points : 102
Danh tiếng : 6
Join date : 15/10/2011
Đến từ : Đại học Công Nghiệp Tp.HCM

Thuật toán qui hoạch động (Dynamic programing) Empty
Bài gửiTiêu đề: Re: Thuật toán qui hoạch động (Dynamic programing)   Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeSun Oct 23, 2011 11:20 pm

lovestorm_6390 đã viết:
uhm cảm ơn anh nhiều nha.hi vọng qua khi luyện code nhiều em sẽ nâng cao dc kĩ thuật lập trình e thấy đôi lúc thuật toán thì mình biết mà kĩ thuật code còn tệ quá

Không phải hy vọng mà là chắc chắn. "C#, Java, Php ai cũng có thể học trong vài tháng còn giải thuật thì không phải ai cũng học được" (trích lời của thầy Ngọc) nên nếu em giỏi giải thuật chắc chắn code cũng sẽ giỏi => học các ngôn ngữ khác chỉ là chuyện nhỏ Embarassed
Về Đầu Trang Go down
https://olphui.forumvi.com
letrongngoc
Đang tập code
Đang tập code



Tổng số bài gửi : 2
Points : 2
Danh tiếng : 0
Join date : 16/10/2011

Thuật toán qui hoạch động (Dynamic programing) Empty
Bài gửiTiêu đề: Một câu hỏi tuyển dụng    Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeThu Dec 01, 2011 2:56 pm

An, Bình, Chung, Dung phải qua cầu khỉ vào buổi tối. Chỉ có một cái đèn pin. Tối đa là hai người đi cùng một lúc, và phải có đèn mới qua/lại được. Họ đi với tốc độ khác nhau. Nếu hai người cùng đi thì cả hai phải đi bằng tốc độ người đi chậm hơn.
An cần 1 phút.
Bình cần 2 phút.
Chung cần 5 phút.
Dung cần 10 phút.
Dĩ nhiên là phải có người cầm đèn đi ngược lại để đón người kế qua nếu cần!
Hỏi: ít nhất họ cần bao nhiêu phút để cả 4 qua được cầu?

Thêm :
sau khi trả lời xong, giải quyết bài toán một cách tổng quát bằng 2 cách : quy hoạch động và greedy
Về Đầu Trang Go down
fallinlove2011
Đang tập code
Đang tập code
fallinlove2011


Tổng số bài gửi : 18
Points : 27
Danh tiếng : 0
Join date : 16/10/2011
Age : 31
Đến từ : Đại Học Công Nghiệp

Thuật toán qui hoạch động (Dynamic programing) Empty
Bài gửiTiêu đề: Re: Thuật toán qui hoạch động (Dynamic programing)   Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeFri Dec 02, 2011 12:50 am

Lời giải:
2 người đi chung mà phụ thuộc vào tốc độ người đi chậm thì ta chọn ra người đi nhanh nhất để khi cầm đèn trở về là tối ưu nhất.
Vì thế lượt đi sẽ là:
An + Dung -> đi 10p và An về 1p;
An + Chung -> đi 5p và An về 1p;
An + Bình -> đi 2p.
==> Tổng là 19p.
Ta thấy số lần đi của An là 2 lần = n - 2 và những người khác mỗi người đi một lần nên Tổng là : Dung + Chung + Bình + An * 2.
Do em coi quy hoạch động và tham lam chưa rõ nên em làm theo cách của mình, nếu có gì sai sót thì xin thầy và các anh góp ý dùm.
Code:
#include <iostream>
using namespace std;
int main() {
   int n,BT = 0,bt[100];
   cout << "Nhap so nguoi:";
   cin >> n;
   cout << "Nhap thoi gian tung nguoi:\n";
   for (int i = 0;i < n;i++)
      cin >> bt[i];
   int min = bt[0];
   for (int i = 0;i < n;i++)
      if (bt[i] > bt[i + 1])
         min = bt[i + 1];
   for (int i = 0;i < n;i++)
      if (bt[i] != min)   
         BT += bt[i];
      else   
         BT += min * (n - 2);      
   cout << "KQ: " << BT << "\n";
}
Về Đầu Trang Go down
letrongngoc
Đang tập code
Đang tập code



Tổng số bài gửi : 2
Points : 2
Danh tiếng : 0
Join date : 16/10/2011

Thuật toán qui hoạch động (Dynamic programing) Empty
Bài gửiTiêu đề: Re: Thuật toán qui hoạch động (Dynamic programing)   Thuật toán qui hoạch động (Dynamic programing) I_icon_minitimeSun Dec 04, 2011 6:21 pm

kết quả : 17 phút
Về Đầu Trang Go down
Sponsored content





Thuật toán qui hoạch động (Dynamic programing) Empty
Bài gửiTiêu đề: Re: Thuật toán qui hoạch động (Dynamic programing)   Thuật toán qui hoạch động (Dynamic programing) I_icon_minitime

Về Đầu Trang Go down
 
Thuật toán qui hoạch động (Dynamic programing)
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» QBSTR - 4.34s - Dynamic programing
» Khởi động lại nào!
» Những quyển sách giải thuật "phải đọc"

Permissions in this forum:Bạn không có quyền trả lời bài viết
Lập trình, thuật toán :: Thư viện :: Thuật toán-
Chuyển đến