一言(ヒトコト)

ASC7 A Nonoptimal Assignments

题面
你可能听说过分配问题,描述如下:给定一个n×n 的整数矩阵,需要从矩阵中选择 n个元素,使得每行每列恰好选择一个元素,并且所选元素的总和尽可能最小。

小 Mini 刚刚听说了这个问题,她认为可以使用所谓的"贪心算法"来解决。也就是说,她认为可以从第一行取最小的元素,然后从第二行取不属于已使用列的最小元素,依此类推。每次如果有多个可能的元素,就使用列号最小的那个。

她的哥哥 Maxi 明白这不是正确的。为了证明这一点,他想构造一个矩阵,使得 Mini 的分配方案不是最优的。请帮助他完成这个任务。

什么时候impossible?
N==1

其他情况
我们让第一行第一个比其他都小1(或者更小)
这样我们一定会选第一行第一个
剩下的一样(这样我们就不需要考虑了)
在接下来某个神秘的一行
第一个数字特别小 其他数特别大
但是我们之前选了第一个 我们在这一行只能选别的超级大的数了

点击查看代码
#include<bits/stdc++.h>
#define Elysia return
using namespace std;
typedef long long LL;
int n;
int main(){
	cin>>n;
	if(n==1){
		cout<<"Impossible";
		Elysia 0;
	}
	cout<<3<<" ";
	for(int i=2;i<=n;i++){
		cout<<4<<"\n";
	}
	for(int i=2;i<n;i++){
		for(int j=1;j<=n;j++){
			cout<<4<<" ";
		}
		cout<<"\n";
	}
	cout<<0<<" ";
	for(int i=2;i<=n;i++){
		cout<<100<<" ";
	}
	Elysia 0;
}
posted @ 2026-08-03 19:22  冬冬猫  阅读(2)  评论(0)    收藏  举报