2 条题解
-
1
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 20; const int INF = 0x3f3f3f3f; int f[1<<N][N], weight[N][N]; int main() { int n; cin >> n; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) cin >> weight[i][j]; memset(f, 0x3f, sizeof(f)); f[1][0] = 0; // 初始状态:只访问过0号点 for(int mask = 0; mask < (1<<n); mask++) { for(int j = 0; j < n; j++) { if((mask >> j) & 1) { // j必须在mask中 for(int k = 0; k < n; k++) { if(!((mask >> k) & 1)) { // k不能在mask中 f[mask|(1<<k)][k] = min(f[mask|(1<<k)][k], f[mask][j] + weight[j][k]); } } } } } cout << f[(1<<n)-1][n-1] << endl; return 0; }
-
1
#include #include using namespace std; int n, x; struct node { int int find(int num) { int l = 0, r = n-1; while (l <= r) { int mid = (l + r) / 2; if (num == a[mid].num) return a[mid].id; else if (num < a[mid].num) r = mid - 1; else l = mid + 1; } return -1; } bool cmp(node x, node y) { return x.num < y.num; } int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> a[i].num; a[i].id = i+1; } sort (a, a + n,cmp); cin >> x; for (int i = 0; i < n; i++) { cout << a[i].num << " "; } cout << endl; int findnum = find(x); if(findnum == -1) cout << "吃饱喝足"; else cout << findnum << endl; }
- 1
信息
- ID
- 4
- 时间
- 5000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 153
- 已通过
- 87
- 上传者