| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求分析我的程序为何TLE呀#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
#include <cctype>
#include <cstring>
#include <algorithm>
#include <string>
#include <list>
#include <limits>
using namespace std;
#define MAXN 2000
int ar[MAXN][MAXN];
char ca[MAXN][8];
int sign[MAXN];
int dif(int i, int j) {
if(i == j) return 0;
else if(ar[i][j] == numeric_limits<int>::max()) {
ar[i][j] = (ca[i][0] == ca[j][0] ? 0 : 1)
+ (ca[i][1] == ca[j][1] ? 0 : 1)
+ (ca[i][2] == ca[j][2] ? 0 : 1)
+ (ca[i][3] == ca[j][3] ? 0 : 1)
+ (ca[i][4] == ca[j][4] ? 0 : 1)
+ (ca[i][5] == ca[j][5] ? 0 : 1)
+ (ca[i][6] == ca[j][6] ? 0 : 1);
ar[j][i] = ar[i][j];
}
return ar[i][j];
}
int main() {
int n, i, j, minf, mint, minw, s, sum, tt;
ios::sync_with_stdio(false);
while(true) {
cin >> n;
if(n == 0) break;
for(i = 0; i < n; i++) cin >> ca[i];
// prime
for(i = 0; i < n; i++) {
sign[i] = i;
for(j = i; j < n; j++) {
ar[i][j] = numeric_limits<int>::max();
ar[j][i] = numeric_limits<int>::max();
}
}
s = 1, sum = 0, sign[0] = 0;
while(s < n) {
minw = numeric_limits<int>::max(), minf = -1, mint = -1;
for(i = 0; i < s; i++) {
for(j = s; j < n; j++) {
tt = dif(sign[i], sign[j]);
if(tt < minw) minf = i, mint = j, minw = tt;
}
}
sum += minw;
// cout << "select " << sign[minf] << "," << sign[mint] << "," << minw << endl;
tt = sign[s];
sign[s] = sign[mint];
sign[mint] = tt;
s++;
}
cout << "The highest possible quality is 1/" << sum << "." << endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator