Tải bản đầy đủ (.pdf) (2 trang)

Hsg tin12 dongthap 2019 2020

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (123.81 KB, 2 trang )

HSG_Tin12_Đồng Tháp_2019_2020
Câu 1:

(Mang tính chất tham khảo)

-Đánh dấu, cho i chạy từ 1 đến số chưa được đánh dấu. O(n)
int C2(){
cin >> n;
for (int i = 1; i <=amax; i ++ ) //amax = 10^5
a[i] = 0;
for (int i =0; i int x;
cin >> x;
a[x] = 1;
}
int ans = 1;
while (a[ans] == 1){
ans ++;
}
return ans;
}

Câu 2: Bài toán cái túi, quy hoạch động, với số lượng không giới hạn.
-Gọi F[i] là giá trị tốt nhất thõa mãn khối lượng i, lần lượt xét từng mặt hàng
thứ j. O(m.n)
=> Kết quả: F[m].
int result(){
for (int i = 1; i<= m;i++)
for (int j = 1; j <= n ; j ++)
if (i < w[j])
f[i] = max(f[i], f[i-1]);


else
f[i] = max(f[i], f[i-w[j]]+v[j]);
return f[m];
}

Câu 3: Đồ thị, thuật tốn tìm đường đi ngắn nhất.
- Thuật tốn BFS, danh sách kề. O(n)
- Head[i] là chỉ số kết thúc của đoạn quản lí đỉnh kề của i-1. Hay Head[i]+1 là chỉ số
bắt đầu của đoạn quản lí đỉnh kề của i. => Chỉ số của đoạn chứa các đỉnh kề của i là
từ Head[i]+1 đến Head[i+1].
- Các đỉnh kề của đỉnh u: Adj[v] , v = Head[u]+1 … Head[u+1].
- Đọc dữ liều đầu vào:

void Doc(){
cin >> n >> s >> t;
for (int i=0; i<= n+1; i++)
Head[i]=0;
for (int i=1; I <= n; i++){
cin >> x[i] >> y[i];
Head[x[i]]++;
Head[y[i]]++;
}
}


-Hàm khởi tạo: avail[i]= true nếu chưa xét, ngược lại.

void Init(){
for (int i=2; i<=n+1; i++)
Head[i]=Head[i-1]+Head[i];

for (int i=1; i<= n; i++){
Adj[Head[x[i]]]=y[i];
Head[x[i]]--;

}

Adj[Head[y[i]]]=x[i];
Head[y[i]]--;

for (int i = 1; i <= n; i ++)
avail[i] = true;
avail[s] = false;

}

-Hàm BFS(): Q[]: hàng đợi

void BFS(){
int d = 1, c = 1;
Q[1] = s;
do{

int u = Q[d];
d ++;
for (int i = Head[u]+1; i <= Head[u+1]; i ++)
if (avail[Adj[i]]){
c ++;
Q[c] = Adj[i];
avail[Adj[i]] = false;
trace[Adj[i]] = u;

}
}while (c >= d);

}

- Dữ liều đầu ra: avail[t] = true => khơng có đường đi tới t.

int Result(){
if (avail[t])
return 0;

}

int ans = 0;
while(t != s){
ans ++;
t = trace[t];
}
return ans-1;

- Hàm main:

int main(){
Doc();
Init();
BFS();
cout<< Result();
return 0;
}




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×