每日一题AC

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 
 

你可能感兴趣的:(C语言,算法,c++)