1 条题解
-
0
问题分析:
- 正视图和侧视图分别约束每列和每行的最大高度
- 需要找到满足两个视图约束的最小立方体数量
- 立方体可以共享(如一个高立方体可同时满足行列要求)
关键点:
- 行列高度匹配
- 共享立方体优化
- 贪心策略
解题步骤:
- 对正视图和侧视图高度分别排序
- 行列高度配对:取最小值求和
- 计算总和即为最小立方体数
#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
- 上传者