论“堆&优先数列”

    今天是我写博客的第二天,昨天写的可真是不堪入目!今天又向同学请教了
 一下,这才知道原因。
 ε=(´ο`*)))唉,不说了,切入正题。今天又学了许多东西,但.....“栈”,我还
 不太理解( ̄ー ̄)??(尽管我是做出来了火车进站)

火车进站
题目描述

有一个车站,每天都会有N辆车进站,进站按从1到N的顺序进站。现在车站的站长想让这些火车按照特定的顺序出站,问可以做到吗?当N为5时,出站顺序若为1 2 3 4 5,可以做到,但是顺序若为5 4 1 2 3,则不行。
在这里插入图片描述

输入格式

一个N,在1000之内,下接一些出站序列,当读到一个0时,则这个测试数据结束。

输出格式

对每个序列输出一行“Yes”或“No”。

input
5
1 2 3 4 5
5 4 1 2 3
0

output
Yes
No

数据规模与约定

时间限制:1s
空间限制:256MB

(网址献上(¬_¬)ノ http://39.98.198.136/homework/314/problem/204)

希望各位大佬们讲解一下 Thanks♪(・ω・)ノ

而接下来则是最重要最重要滴“堆&优先数列”
啥(⊙_⊙)?啥是堆(⊙_⊙)?今天听老师讲了不到一个小时,我⊙▃⊙ Σ(☉▽☉"a
懵懵懵懵懵懵懵~~~~~~~~~~~~
T_T T_T T_T T_T
以及那被称为“古娜拉黑暗女神”的优先数列。
不说了,还是叫各位大佬讲一下题吧~~
木板切割
题目描述

FarmerJohn想修理牧场栅栏的某些小段。为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50,000)。然后,FJ去买了一块很长的木板,它的长度正好等于所有需要的木板的长度和。接下来的工作,当然是把它锯成需要的长度。FJ忽略所有切割时的损失——你也应当忽略它。

FJ郁闷地发现,他并没有锯子来把这块长木板锯开。于是他把这块长木板带到了Farmer Don的农场,想向FD借用锯子。   作为一个有商业头脑的资本家,FarmerDon没有把锯子借给FJ,而是决定帮FJ锯好所有木板,当然FJ得为此付出一笔钱。锯开一块木板的费用,正比于木板的长度。如果这块木板的长度是21,那么锯开它的花费便是21美分。

谈妥条件后,FD让FJ决定切割木板的顺序,以及每次切割的位置。请你帮FJ写一个程序,计算为了锯出他想要的木板,他最少要花多少钱。很显然,按不同的切割顺序来切开木板,FJ的总花费可能不同,因为不同的切割顺序,会产生不同的中间结果。

输入格式

•第1行: 一个正整数N,表示FJ需要木板的总数

•第2…N+1行: 每行包含一个整数,为FJ需要的某块木板的长度

输出格式
•第1行: 输出一个整数,即FJ完成对木板的N-1次切割的最小花费 。

样例数据

input
3
8
5
8

output
34

输入说明:
FJ打算把一块长为21的木板切成长度分别为8,5,8的三段。

输出说明:
起初,木板的长度为21。第一次切割木板花费21美分,把木板切成长分别为13和8的两块。然后花费13美分把长为13的木板切成长为8和5的两块。这样的总花费是21+13=34美分。如果第一次把木板切成长为16和5的两块,那么第二次切木板的花费就是16美分,这样的总花费就是37美分,比刚才花费34美分的方案来的差。

数据规模与约定

usaco 2007 nov gold

时间限制:1s
1s

空间限制:256MB
256MB
以下是我九十分的代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("plank.in","r",stdin);
freopen("plank.out","w",stdout);	
long long n;
cin>>n;
long long a[n+10];
for(int i=1;i<=n;i++)
cin>>a[i];
int t=1,tt=0;
for(int i=1;i<=n-1;i++)
{
	sort(a+t,a+1+n);
	tt+=a[t]+a[t+1];
	a[t+1]+=a[t];
	t++;
}
cout<<tt;
    return 0;
}

拜拜~~┏(^0^)┛

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

A little prince. (Green)

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值