#include //Include tất cả các thư viện #define MAX 10 using namespace std; int n; int Bool[MAX] = { 0 };//Đánh dấu chưa có phần tử nào sử dụng hết int A[MAX];//Lưu hoán vị vào mảng A int x[MAX][MAX]; int danhDau[MAX][MAX]; //Mảng đánh dấu int mAX = -1, sum=0; void xuat() { for (int i = 1; i <= n; i++) cout << A[i] << " "; cout << endl; } //Để đơn giản, ta vét cạn tất cả các trường hợp bằng cách liệt kê hoán vị (Cách này là đơn giản nhất á :v) // https://nguyenvanhieu.vn/liet-ke-cac-hoan-vi/ void Try(int k) { //Tạo các hoán vị for (int i = 1; i <= n; i++) { //Kiểm tra nếu phần tử chưa được chọn thì sẽ đánh dấu if (!Bool[i]) { A[k] = i; // Lưu một phần tử vào hoán vị Bool[i] = 1;//Đánh dấu đã dùng if (k == n) //Bắt đầu xử lí nè - Sau khi đã tạo được một hoán vị thì bắt đầu xử lí... cứ lần lần đến hết :v { sum =0; for (int i = 1; i <= n; i++) sum += x[i][A[i]]; if (sum > mAX) { memset(danhDau, 0, sizeof(danhDau)); mAX = sum; sizeof(danhDau, 0); for (int i = 1; i <= n; i++) danhDau[i][A[i]] = 1; //Đánh dấu tại vị trí [i][A[i]] để cuối bài quét vị trí } } else Try(k + 1); Bool[i] = 0; } } } int main() { ifstream fi ("Baitap.inp"); if (fi.fail()) cout << "File path Error!!"; ofstream fo ("Baitap.out"); fi >> n; //Đọc file for (int i=1; i<=n; i++) { for (int j=1; j<=n; j++) { fi >> x[i][j]; } } Try(1); //Vét hết tất cả hoán vị và xử lí nè, giới hạn n < 10 chứ k là lag máy nha fo << "GTLN: " << mAX <