18.03.20 vijos1059积木城堡

描述

XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡。城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木。小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒。所以他在垒城堡的时候总是遵循这样的规则。

小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度。为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执。可是他发现自己在垒城堡的时候并没有预先考虑到这一点。所以他现在要改造城堡。由于他没有多余的积木了,他灵机一动,想出了一个巧妙的改造方案。他决定从每一个城堡中挪去一些积木,使得最终每座城堡都一样高。为了使他的城堡更雄伟,他觉得应该使最后的城堡都尽可能的高。

任务:
请你帮助小XC编一个程序,根据他垒的所有城堡的信息,决定应该移去哪些积木才能获得最佳的效果。

格式

输入格式

第一行是一个整数N(N<=100),表示一共有几座城堡。以下N行每行是一系列非负整数,用一个空格分隔,按从下往上的顺序依次给出一座城堡中所有积木的棱长。用-1结束。一座城堡中的积木不超过100块,每块积木的棱长不超过100。

输出格式

一个整数,表示最后城堡的最大可能的高度。如果找不到合适的方案,则输出0。

样例1

样例输入1

2
2 1 –1
3 2 1 –1

样例输出1

3

提示

原数据有误,不知我修正后是不是对?

来源

NlogN年之前浙江省队选拔第X轮

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <stdlib.h>
 4 #include <algorithm>
 5 #include <string.h>
 6
 7 using namespace std;
 8
 9 const int maxn=10000;
10 int f[maxn+1],now[maxn+1];
11
12 int main()
13 {
14     int n;
15     for(int i=0;i<=maxn;i++)
16         f[i]=1;
17     scanf("%d",&n);
18     for(int i=1;i<=n;i++){
19         memset(now,0,sizeof(now));now[0]=1;
20         int x=0;
21         while(1)
22         {
23             scanf("%d",&x);
24             if(x==-1)
25                 break;
26             for(int h=maxn-x;h>=0;h--)
27                 if(now[h])
28                     now[h+x]=1;
29         }
30         for(int j=0;j<=maxn;j++)
31             f[j]&=now[j];
32     }
33     for(int i=maxn;i>=0;i--){
34         if(f[i])
35         {
36             printf("%d\n",i);
37             return 0;
38         }
39     }
40     return 0;
41 }

思路:求出每个城堡在抽去若干块以后可以达到的高度,然后与目前已计入城堡可达到的高度进行与计算

IDE上没法正常运行是只有我一个人吗?-?把maxn改很小也不行,什么情况,debug都没法用

原文地址:https://www.cnblogs.com/yalphait/p/8612516.html

时间: 2024-10-01 18:46:25

18.03.20 vijos1059积木城堡的相关文章

【Node.js安装步骤】 -- 2019-08-08 18:03:20

原文: http://106.13.73.98/__/56/ Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.本文详细介绍了Node.js的安装和使用. Node.js 不是一个 JavaScript 框架,不同于CakePHP.Django.Rails.Node.js 更不是浏览器端的库,不能与 jQuery.ExtJS 相提并论.Node.js 是一个让 Ja

【dp】积木城堡

积木城堡 来源:vijos P1059 [问题描述]     XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则.     小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执

积木城堡

XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则. 小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执.可是他发现自己在垒城堡的时候并没有预先考虑到这一点.所以他现在要改造

Docker 18.03私有仓库搭建

我们在使用Docker时 下载镜像一般都是在外网下载并使用.可是当我们没有外网时我们不得不自己搭建私有仓库.流程图:docker 版本[[email protected] ~]# docker versionClient:Version: 18.03.1-ceAPI version: 1.37Go version: go1.9.5Git commit: 9ee9f40Built: Thu Apr 26 07:20:16 2018OS/Arch: linux/amd64Experimental:

UnitSelector.ONDA.18.03.08 1CD+AutoDesSys form.Z pro v8.6.3.1 32&amp;64

Survey CAD System pfCAD agriCAD v4.0.40 农业绘图和设计软件Agricad PC提供农业绘图和设计工作的工具. 它是在CAD环境中开发的,主要功能是: 映射管理边界的验证和控制使用Supertrack进行工作的可视化和打印葡萄园和果园的设计枢轴灌溉设计泥浆扩散作业的管理 SynaptiCAD Product Suite 20.31 电子电路设计自动化软件使用SynaptiCAD工具,您可以开始分析和模拟设计思路,而无需完成整个电路或模型模型. Synapti

积木城堡题解

Description - 问题描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则. 小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度(明明是增加后宫人数 Σ( ° △ °\|\|\|)  ).为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了

P1504 积木城堡 有背包的影子

题意:给出n堆木块,每一堆从大到小堆砌,是一个非绝对递减序列 每一堆的高度就所有木块大小的总和,让我们将这n堆木块中取出一些,使n堆木块高度一样高 求出最高的高度(只能取出,不能增加) 思路:根据题目数据,最大的高度是10000,我们就像操作01背包那样,从大到小枚举一遍, 然后求出这n堆木块,都能到达些什么高度,用vis保存 最后再从大到小枚举一遍,所有的堆都能到达某一高度,便是答案 1 #include<bits/stdc++.h> 2 using namespace std; 3 int

[tyvj1190]积木城堡

描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则.小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执.可是他发现自己在垒城堡的时候并没有预先考虑到这一点.所以他现在要

vijosP1059 积木城堡

链接:https://vijos.org/p/1059 [思路] 01背包. 刚开始想麻烦了,想的是二分答案然后01背包判断是否可行,但是首先答案不满足单调性所以不能二分(这点以后做题之前一定要想清楚),其次如果从大到小枚举依次判定的话会TLE. 不得不说自己真是笨. 其实可以对每一组积木用一次01背包,用一个cnt记录满足该高度的城堡数目.然后从大到小检查如果为n输出即可.时间上是O(n^3). [代码] 1 #include<iostream> 2 #include<cstring&