zoukankan      html  css  js  c++  java
  • LA4636积木艺术

    题意:
          有一些1*1*1的单位正方体积木,现在要摆积木,每一块积木有两种方法,要么放在地面上,要么放在别的积木的正上方,现在给你摆好积木的正面图和侧面图,问你最少用了多少块积木。


    思路:
          比较有意思也比较容易想到,而且题目中给的几个图看完估计就能想到怎么做了,光看文字的时候第一组测试数据我都没模拟过去,哎!看完图会发现一个问题,假如我们看正面图,我们看到的是一组连续的,但是在实际情况下他们有可能不连续,我说的不连续是指前后的不连续,至于是什么顺序,可以使任意顺序,任意顺序?越乱的东西越要简单想,那么也就是说我们根本不用考虑他的顺序,我们只要根据最优解随意改变他的顺序就行了,怎么样才是最优?题目要求是少的积木,那么首先正面的这些全要有,侧面呢?能没有就没有,怎么样才能没有呢?只有正面出现一个和他等高的,那么我们就直接用那个等高的去替换他就行了,但是注意一点,一个只能替换一个,如果没得替换的,那么就把当前高度加到答案里就行了,还有这个题目用谁去替换谁答案都是一样的,因为正视图和侧视图本来就是相对而言的。




    #include<stdio.h>
    #include<string.h>


    int main ()
    {
       int n ,m ,i ,a ,Ans;
       int mark[25];
       while(~scanf("%d %d" ,&n ,&m) && n + m)
       {
          memset(mark ,0 ,sizeof(mark));
          Ans = 0;
          for(i = 1 ;i <= n ;i ++)
          {
             scanf("%d" ,&a);
             Ans += a;
             mark[a] ++;
          }
          for(i = 1 ;i <= m ;i ++)
          {
             scanf("%d" ,&a);
             if(mark[a]) mark[a] --;
             else Ans += a;
          }
          printf("%d " ,Ans);
       }
       return 0;






  • 相关阅读:
    Java线程:线程的调度-优先级
    Java线程:线程的调度-休眠
    Java线程:线程的交互
    Java线程:线程的同步与锁
    使用GIT时排除NuGet的packages文件夹
    解决Visual Studio 2013 XAML设计器异常
    代码协定(四)——安装和使用
    在WPF 4.5中跨线程更新集合
    微软自家的.Net下的JavaScript引擎——ClearScript
    在MEF中手动导入依赖的模块
  • 原文地址:https://www.cnblogs.com/csnd/p/12062667.html
Copyright © 2011-2022 走看看