1 条题解

  • 0
    @ 2025-5-28 13:12:21

    问题分析

    1. 正视图和侧视图分别约束每列和每行的最大高度
    2. 需要找到满足两个视图约束的最小立方体数量
    3. 立方体可以共享(如一个高立方体可同时满足行列要求)

    关键点

    • 行列高度匹配
    • 共享立方体优化
    • 贪心策略

    解题步骤

    1. 对正视图和侧视图高度分别排序
    2. 行列高度配对:取最小值求和
    3. 计算总和即为最小立方体数
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<functional>
    #include<algorithm>
    using namespace std;
    int a[25],b[25];//存储输入数据
    int cnt1[25],cnt2[25];//用来找成对数字
    int n,m;
    int main()
    {
    	int i,k,ans,num;
    	while(scanf("%d%d",&n,&m),n&&m)
    	{
    		k=ans=num=0;
    		memset(cnt1,0,sizeof(cnt1));
    		memset(cnt2,0,sizeof(cnt2));//清空操作
    		for(i=0;i<n;i++)
    		{
    			scanf("%d",&a[i]);
    			cnt1[a[i]]++;
    		}
    		for(i=0;i<m;i++)
    		{
    			scanf("%d",&b[i]);
    			cnt2[b[i]]++;
    		}//输入数据
    		for(i=1;i<=20;i++)//每个数字最多为20
    		{
    			k=abs(cnt1[i]-cnt2[i]);//成单的个数
    			num=min(cnt1[i],cnt2[i]);//成对的个数
    			ans+=(i*num+i*k);
    			//printf("i=%d k=%d num=%d ans=%d\n",i,k,num,ans);
    		}
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    
    
    • 1

    信息

    ID
    2802
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者