3.小张的工厂里的厂房受到台风的袭击,导致部分厂房的顶棚遭到了破坏,急需修理。厂房是由一间间的相同宽度的隔间组成,这些隔间都是连在一起的,连成了一条直线,隔间采用塑钢板作为顶棚,多个隔间可以共用一块长的塑钢板。这些隔间里有的有货物,有的没有货物,因为考虑到最近可能还会有台风,所以必须把有货物的隔间的顶棚修理好。 目前塑钢板的供应商能提供的板材的数量有限制,但长度没有限制,所以小张只能尽量的减少板材的数量。请你帮助小张计算需要采购塑钢板的最小长度。
输入格式 第1行:M,S和C(用空格分开)。M为能买到的板材的最大数目(1<=M<=50),S为厂房总的隔间的数量,1<=S<=200,C为有货物的隔间的数量。 第2到C+1行:每行包含一个整数,表示有货物的隔间的编号。编号从1开始,1<=C<=S
输出格式 输出一行,采购的塑钢板的总长度。
输入输出样列 输入样例1: 1 10 4 2 5 7 8 输出样例1: 7
思路:对编号排序用最大的编号减最小的然后加一(网上题解说是最小生成树,我觉得没那么麻烦,代码实现功能和题解一样)
AC代码:
#include#include using namespace std; int main() { int m, s, c; cin >> m >> s >> c; int a[c]; for (int i = 0; i < c; i++) { cin >> a[i]; } sort(a, a + c); cout<
网上最小生成树
#include#include using namespace std; const int MAXN=205; const int MAXM=40010; int M,S,C; int cnt=0; int num=0; int ans=0; int f[MAXN]; int a[MAXN]; struct Edge { int u,v,w; bool operator<(const Edge a)const{ return w >M>>S>>C; for(int i=0;i<=S;++i) { f[i]=i; } for(int i=1;i<=C;++i) { cin>>a[i]; for(int j=1;j