木板

【DHUOJ】进阶39牛棚问题

戏子无情 提交于 2020-03-17 10:27:29
38 修理牛棚 作者: xxx时间限制: 1S章节: 一维数组 问题描述 : 在一个暴风雨的夜晚,农民约翰的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假,所以牛棚(牛棚的总数S:1<= S<=200)没有住满。 剩下的牛一个紧挨着另一个被排成一行安置在有屋顶的牛棚来过夜。 所以有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度,且宽度设为1。 因为有些门遗失,农民约翰需要架起新的木板作为门。 他的新木材供应者将会供应他任何他想要的长度,但是供应者只能提供有限数目的木板。 农民约翰想将他购买的木板总长度减到最少。 计算拦住所有有牛的牛棚所需木板的最小总长度。 输出所需木板的最小总长度作为的答案。 说明:拦住一个牛棚需要的木板长度为1,拦住相邻的三个牛棚则需要木板长度为3。 比如有牛的牛棚编号为: 3 5 8 10 11 并且只能使用两块木板, 则第一块木板从3到5,长度为3, 第二块木板从8到11,长度为4, 因此,需要木板的总长度为7。 输入说明 : 第 1 行: M 和 C(用空格分开) 第 2 到 C+1行: 每行包含一个整数,表示牛所占的牛棚的编号。 其中: 可能买到的木板最大的数目:M(1<= M<=50); 需要安置的牛的数目C(1<= C <=S) 安置后牛所在的牛棚的编号stall_number(1<= stall_number <= S)。 输出说明 :

修理牛棚(待修改)

喜你入骨 提交于 2020-01-25 20:33:26
修理牛棚(贪心/动态规划) 问题描述 : 在一个暴风雨的夜晚,农民约翰的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假,所以牛棚(牛棚的总数S:1<= S<=200)没有住满。 剩下的牛一个紧挨着另一个被排成一行安置在有屋顶的牛棚来过夜。 所以有些牛棚里有牛,有些没有。所有的牛棚有相同的宽度,且宽度设为1。 因为有些门遗失,农民约翰需要架起新的木板作为门。 他的新木材供应者将会供应他任何他想要的长度,但是供应者只能提供有限数目的木板。 农民约翰想将他购买的木板总长度减到最少。 计算拦住所有有牛的牛棚所需木板的最小总长度。 输出所需木板的最小总长度作为的答案。 说明 :拦住一个牛棚需要的木板长度为1,拦住相邻的三个牛棚则需要木板长度为3。 比如有牛的牛棚编号为: 3 5 8 10 11 并且只能使用两块木板, 则第一块木板从3到5,长度为3, 第二块木板从8到11,长度为4, 因此,需要木板的总长度为7。 输入说明 : 第 1 行: M 和 C(用空格分开) 第 2 到 C+1行: 每行包含一个整数,表示牛所占的牛棚的编号。 其中: 可能买到的木板最大的数目:M(1<= M<=50); 需要安置的牛的数目C(1<= C <=S) 安置后牛所在的牛棚的编号stall_number(1<= stall_number <= S)。 输出说明 : 单独的一行包含一个整数表示所需木板的最小总长度

脸盆大哥的木桶

六月ゝ 毕业季﹏ 提交于 2020-01-23 00:39:40
链接:https://ac.nowcoder.com/acm/problem/14670 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 彩虹岛网红脸盆大哥最骄傲就是自己制作的木桶。一天𝑙𝑤𝑞拿了𝑛块木板,其中第𝑖块木板的高度为ℎ𝑖,他希望脸盆大哥能够用这些木板制作出精美的木桶。脸盆大哥告诉𝑙𝑤𝑞制作一个木桶需要𝑘块木板,并且所有桶的底面积为𝑠,底面的木板由𝑠𝑙𝑝提供。𝑙𝑤𝑞想知道用这些木块所制作出来的木桶最多能够盛多少体积的水。 注意,木板不能叠在另一个木板上,且不需要考虑木桶具体是怎么由木板组成的,即是说1块或2块木板也可以组成木桶,底面积仍为𝑠。 输入描述: 输入第一行为一个整数𝑇(2 ≤ 𝑇 ≤ 20),表示一共有𝑇组测试数据。 对于每组测试数据: 第一行有三个整数𝑛(2 ≤ 𝑛 ≤ 1 0 3 10^3 1 0 3 ), 𝑘, 𝑠(1 ≤ 𝑛, 𝑘, 𝑠 ≤ 1 0 3 10^3 1 0 3 ),分别表示木板的数量、制作一个木桶所需要的木板数以及木桶的底面积。 第二行有𝑛个整数,其中第𝑖个整数ℎ𝑖(1 ≤ ℎ𝑖 ≤ 1 0 3 10^3 1 0 3 )代表第𝑖个木板的高度。 输出描述: 对于每组测试数据输出一个整数𝑥

贪心——组合游戏

感情迁移 提交于 2020-01-21 17:32:57
贪心——组合游戏 题目描述 2018年4月8日星期日,小龙沉迷于一个叫做组合的游戏。 游戏规则是这样的,原本有一个长度为A的大木板,现在把它分成了n份长度可能不一样的木板。每一个模板的长度为Xi,每次游戏都要把这些木板组合为一个完整的木板,但是小龙每次只能拿两个小木板去组合成为一个,然后把这新木板和剩下的木板放在一起,重复以上步骤直到最后只剩下一个木板。 每次组合木板会花费K个金币,K等于拿起的两个木板长度之和,问小明每次玩游戏最少花费是多少? 例如:当有n=3块木板的时候 每一块木板的长度分别是是 1、2、3 第一次拿长度为1 和 2 的木板拼接成长度为3的木板,花费3个金币 此时有两块木板,长度分别为3 和 3 第二次拿长度为3 和3 的木板拼接成长度为6的木板,花费6个金币 总共花费9个金币(最少)。 输入描述: 输入有多组,每一组第一行是n(1 < n <= 200) 接下来第二行到第n+1行,第i+1行表示小木板的长度Xi (Xi <= 200) 输出描述: 输出每个样例的最少花费,每个答案占据一行。 示例 输入 3 1 2 3 输出 9 # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <algorithm> # include <queue

Fence Repair(POJ 3253)

人走茶凉 提交于 2020-01-17 01:01:25
农夫约翰为了修理栅栏,要将一块很长的木板切割成 N 块,准备切成的木板长度为 Ln ,未切割前木板的长度恰好为切割后木板长度的总和。每次切断木板时,需要的开销为这块木板的长度。例如长度为21的木板要切成长度为 5、8、8 的三块木板,长 21 的木板切成长度为 13 和 8 的木板时 开销为 21 。再将长度为13的板切成长度为 5 和 8 的板时,开销为 13 。于是合计开销为 34 。 请求出按照目标要求将木板切割完的最小开销是多少。 题目中 1 <= N <= 20000 , 0 <= Li <= 50000 输入:第一行是将木板切割成的块数 N ,第二行有 N 个数,分别为第 Li 块木板的长度。 输出:k,木板切割完的最小开销。 sample input: 3 8 5 8 sample output: 34 贪心,其实就算霍夫曼编码的思想,开销越大的越先切 34 = (5+8) *2 + 8 = 34 # include <bits\stdc++.h> using namespace std; typedef long long ll; const int MAX_N = 20010; int N, L[MAX_N]; void solve() { ll ans = 0; // 直到计算到模板1块为止 while (N > 1) { // 求出最短的板和次短的板 int

【日记】12.31

孤者浪人 提交于 2020-01-01 00:50:51
12.31 贪心 1.P1209:在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶、门被吹飞了 好在许多牛正在度假,所以牛棚没有住满。 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。 自门遗失以后,Farmer John 必须尽快在牛棚之前竖立起新的木板。他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板。 Farmer John 想将他购买的木板总长度减到最少。 给出 m , s , c,表示木板最大的数目、牛棚的总数、牛的总数;以及每头牛所在牛棚的编号,请算出拦住所有有牛的牛棚所需木板的最小总长度。 2.P2949:约翰有太多的工作要做。为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间。 他的工作日从0时刻开始,有10^9个单位时间。在任一时刻,他都可以选择编号1~N的N(1 <= N <= 10^6)项工作中的任意一项工作来完成。 因为他在每个单位时间里只能做一个工作,而每项工作又有一个截止日期,所以他很难有时间完成所有N个工作,虽然还是有可能。 对于第i个工作,有一个截止时间D_i(1 <= D_i <= 10^9),如果他可以完成这个工作,那么他可以获利P_i( 1<=P_i<=10^9 ). 在给定的工作利润和截止时间下,约翰能够获得的利润最大为多少.

青蛙跳台阶(斐波那契数列)

泪湿孤枕 提交于 2019-12-30 19:02:16
题目描述 题目一 :一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 变态跳台阶: 题目二 :一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 实现思路 题目一 :刚接触到这个题目是没有头绪的,观察了一段时间后发现,青蛙的跳法恰好符合Fibonacci sequence( 斐波那契数列 ),于是便有了解决思路。 n 个台阶的跳法 f(n)=f(n-1)+f(n-2) 。 题目二 :每个台阶可以看作一块木板,让青蛙跳上去,n个台阶就有n块木板,最后一块木板是青蛙到达的位子, 必须存在。其他 n-1 块木板可以任意选择是否存在,则每个木板有存在和不存在两种选择, n-1 块木板 就有 2^(n-1) 种跳法,可以直接得到结果。 编程实现 public class Solution { //基础跳台阶,题目一 public int JumpFloorBase ( int target ) { if ( target <= 0 ) { return 0 ; } if ( target == 1 ) { return 1 ; } if ( target == 2 ) { return 2 ; } int first = 1 , second = 2 ,

Codeforces Round #598 (Div. 3) C. Platforms Jumping

我的梦境 提交于 2019-12-03 20:38:52
题目地址: http://codeforces.com/contest/1256/problem/C 题意:一条有n个格子水的河,要跳到对岸去,里面有数量小于等于n块木板,没部分木板都有自己的集合,各个集合的木板都是要连在一起的,木板不能重合放,一次能跳(1,d)的距离,求能不能跳到对面,能的话将木板的放置方法打印出来。 思路:先将木板都放在右边,然后每次跳d的距离,每次都将一个集合的木板转移到跳的位置即可,具体实现看代码 AC代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 typedef long long ll; 7 const int N=1005; 8 void sol(){ 9 int n,m,d; 10 int a[N]={0},b[N]={0},c[N]={0},s[N]={0}; 11 cin>>n>>m>>d; 12 for(int i=1;i<=m;i++){ 13 cin>>c[i]; 14 b[i]=b[i-1]+c[i]; 15 } 16 int lst=d; //开始时直接跳到d位置 17 for(int i=1;i<=m;i++){ 18 int fir=n+1-(b[m]

Codeforces Round #598 (Div. 3) C - Platforms Jumping

大城市里の小女人 提交于 2019-12-03 14:48:06
题意:给定一个长度为n的池塘,m块木板以及他们各自的长度,每次你能从i跳到[i+1,i+d],木板之间的相对位置不能移动,可以相邻不能相交,求怎么放置木板能使得从0跳到n+1。 打比赛的时候手有点生,脑子也有点不清楚,但还有思路,边写边改,写到后面不知道自己写了什么…挺无语的,也挺难受的,比赛前两分钟就走了去学校操场吹了吹风。。 题解:我觉得这道题最难考虑的就是贪心贪过头了,木板没地方放了的情况,所以我就先把空地(0)的距离求出来,然后m次循环比较跳的最远距离和剩余空地的大小,取小的先铺0,然后再铺木板,直到没有空地了剩余的就全是木板。 #include<bits/stdc++.h> #include<vector> #include<map> #include<queue> #define LL long long #define INF 0x3f3f3f3f #define MOD 1000000007 using namespace std; int a[1005], ans[1005]; int main() { int n, m, d; scanf("%d%d%d", &n, &m, &d); int sum = 0; for(int i = 1;i <= m;i++) { scanf("%d", &a[i]); sum += a[i]; } if((m+1)*d+

找规律题目总结

北慕城南 提交于 2019-12-03 01:24:17
最近找规律的题目都写挂了... 我发现是我推理的时候有点小问题 总结一下 相似围栏 (fence.pas/c/cpp) 【问题描述】 何老板购置了一套别墅, 该别墅门口有一片花园, 何老板用 n 块高度不同的木板排成一 排, 搭建了围栏。 一天何老板叫了外卖, 正好是刘郃德骑车送递, 刘被拦在围栏之外, 他发现何老板家的 围栏看起来很好看, 很有高级感。 于是刘郃德也买了 n 块高度不同的木板, 打算参照何老板 的方案, 搭建相似的围栏。 所谓“相似” 是指, 刘郃德的相邻两块木板的高度关系与何老板 对应位置的两块木板的高度关系相同。 比如何老板围栏的第 i 块木板的高度大于第 i+1 块, 那么刘郃德围栏的第 i 块木板的高度也必须大于第 i+1 块。 同时, 刘郃德想要相邻两块木板高度差的绝对值之和尽量大。 请你帮他找出最优方案。 拿到这道题 我首先进行了举例子 1.我想到了要把一些大的或者小的数放到中间 使得代价最大 2.然后我发现了仅为一个峰的情况下 左右两边可以对调 我觉得这很显然 但是我不知道怎么进行排列数 3.然后我利用计算机进行了一波打表 发现一些数可以对调 代价不变 说说我的思路哪里出了问题 第一个问题是觉得显然的东西没有具体证明研究 要是我证明了2 的结论我就可以发现只和波峰波谷有关 第二个问题是我在考虑对调的情况下 还在考虑数怎么排列 应该分开考虑