求助
查看原帖
求助
244707
NorthernLight楼主2021/7/23 11:53

理解了思路之后开始敲代码,然后莫名出现了WA和TLE 照着lyd的代码改了几遍,发现还是这样……

//这是我自己的代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int N = 505, eps = 1e-5;
int n, m, dim, ans;
long double mar[505][505];
int pri[N];

int main()
{
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= m; ++j)
			scanf("%lf", &mar[i][j]);
	for(int i = 1; i <= n; ++i)	scanf("%d", pri+i);
	
	for(int i = 1; i <= m; ++i)//对每个 xi 消元 
	{
		int min_id = 0; 
		for(int j = dim+1; j <= n; ++j)
		{
			if(fabs(mar[j][i]) > eps && (min_id == 0|| pri[j] < pri[min_id]))	min_id = j;
		}
		if(min_id == 0)	continue;
		dim++;ans += pri[min_id];
		for(int j = 1; j <= m; ++j)	swap(mar[dim][j], mar[min_id][j]);
		swap(pri[dim], pri[min_id]);
		for(int j = 1; j <= n; ++j)
		{
			if(dim == j || fabs(mar[j][i]) < eps)	continue;
			long double rate = mar[j][i] / mar[dim][i];
			for(int k = i; k <= m; ++k)	mar[j][k] -= mar[dim][k] * rate;
		}
	}
	printf("%d %d\n", dim, ans);
	return 0;
}
//这是lyd的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
long double a[510][510], eps = 1e-8;
int c[510], n, m, dim, ans;

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			double temp; scanf("%lf", &temp); a[i][j] = temp;
		}
	for (int i = 1; i <= n; i++) {
		double temp; scanf("%lf", &temp); c[i] = temp;
	} 
	int dim = 0;
	// 对每个未知量xi进行一次消元 
	for (int i = 1; i <= m; i++) {
		// 找到xi系数不为0、价格最低的一个 
		int now = 0;
		for (int j = dim + 1; j <= n; j++) {
			if (fabs(a[j][i]) > eps && (now == 0 || c[j] < c[now]))
				now = j;
		}
		// xi是自由元 
		if (now == 0) continue;
		// 向基底中增加一个向量 
		dim++;
		ans += c[now];
		for (int j = 1; j <= m; j++)
			swap(a[now][j], a[dim][j]);
		swap(c[now], c[dim]);
		// 消去其它行中第i列的值 
		for (int j = 1; j <= n; j++)
			if (dim != j && fabs(a[j][i]) > eps) {
				long double rate = a[j][i] / a[dim][i];
				for (int k = i; k <= m; k++)
					a[j][k] -= a[dim][k] * rate;
			}
	}
	cout << dim << ' ' << ans << endl;
}
2021/7/23 11:53
加载中...