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;
}

浙公网安备 33010602011771号