Big Surf y leopardo aprendizaje Pa inteligencia - cola de prioridad usando -priority_queue de (pila de clasificación)

No importa qué tan alto de la montaña, escalar, subir siempre,
el camino puede ser largo, seguir adelante, será capaz de alcanzar.

Use la cola de prioridad priority_queue

En primer lugar se describe la siguiente priority_queue esta cosa.
Esta cosa tiene tres parámetros
En primer lugar, el primer argumento es como una pila normal y la cola, este es un tipo de esta misma.
El segundo vector se hereda esta cosa, por lo general vector <>
La tercera función se ordena, hay más () menos cambio () aquí es el miembro tipo del tipo ordenó
Para castaña
inteligencia Big Surf
título Descripción

CCTV Xiaowei inscribirse programa de surf intelecto. El desafío atrajo a muchos participantes, el moderador en el reconocimiento del valor de todos para recompensar a cada participante m yuanes. No sea demasiado feliz! Debido a que estos no son necesariamente pagando el dinero que es suyo? ! A continuación, el anfitrión anunció las reglas del juego:
En primer lugar, el juego se divide en n periodos de tiempo (n≤500), que da un montón de juegos, cada juego debe ser completado (1≤ti≤ antes del período especificado ti n). Si un juego no puede ser completada antes del límite de tiempo prescrito, los honorarios de incentivo de m-ario parte deducir de la wi dinero, wi es un número natural, diferente dinero del juego deducción no es lo mismo. Por supuesto, cada juego en sí es muy simple, para garantizar que cada participante puede ser completado dentro de un período de tiempo, pero debe partir de todo el período. Moderador sólo quieren interrogar a cada participante la forma de organizar el orden de su propia organización para hacer el juego. Como participante, Xiaowei quería ganar, por supuesto, quiero ganar más dinero! Nota: El juego no permitirá a los participantes a perder dinero!

entrada

Los primeros actos de m, representa el comienzo de una recompensa para el dinero de cada participante;
la segunda fila n, n expresado pequeño juego;
la tercera línea tiene el número n, respectivamente, las disposiciones de juego 1 a n de plazos;
4 fila tiene el número n, representan cada uno 1 a juego n de carga no puede ser completado antes de la fecha límite.

exportación

Xiaowei fue capaz de ganar la mayor cantidad de dinero.

Ejemplo de entrada

10 000
7
4 2 4 3 1 4 6
70 60 50 40 30 20 10

Ejemplo de salida

9950

Este problema es un pensamiento codiciosa del título, la codicia idea es encontrar la solución óptima para cumplir con la hora actual, lo que significa que si usted no está satisfecho con este relleno, entonces se libera un tiempo para él (Después del tiempo de clase será controlada dentro de una diferencia de 1) Así que el pop la parte superior del elemento de cabeza, así que ponga esto una vez desocupado.
Tiempo para AC

#include<unordered_map>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<utility>
#include<stdio.h>
#include<vector>
#include <stack>
#include<string>
#include<math.h>
#include<cmath>
#include<queue>
#include<map>
#pragma warning(disable:4244)
#define PI 3.1415926536
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll ll_inf = 9223372036854775807;
const int int_inf = 2147483647;
const short short_inf = 32767;
const char char_inf = 127;
inline ll read() {
	ll c = getchar(), Nig = 1, x = 0;
	while (!isdigit(c) && c != '-')c = getchar();
	if (c == '-')Nig = -1, c = getchar();
	while (isdigit(c))x = ((x << 1) + (x << 3)) + (c ^ '0'), c = getchar();
	return Nig * x;
}
inline void out(ll a)
{
	if (a < 0)putchar('-'), a = -a;
	if (a >= 10)out(a / 10);
	putchar(a % 10 + '0');
}
ll qpow(ll x, ll n, ll mod) {
	ll res = 1;
	while (n > 0) {
		if (n & 1)res = (res * x) % mod;
		x = (x * x) % mod; n >>= 1;
	}
	return res;
}
#define read read()
struct node {//存储
	ll t, val;
}save[1000000];
bool cmp(node a, node b)//让时间小的放在最前面这样的话入队列时可以控制时间差在1之内
{                       //当前的时间要么等于限定时间,要么在限定时间之后。
	return a.t < b.t;   //那些有可能叠加时间的导致当前去掉一个pop不能满足的
}                       //都会在每一次的pop中去除。因为不可能出现当前的时间会比以用时间小的
int main()
{
	ll tot = read;//记录总共的money
	ll num = read;
	ll sum = 0;
	for (ll i = 0; i < num; i++)save[i].t = read;
	for (ll i = 0; i < num; i++)
	{
		save[i].val = read;
		sum += save[i].val;//记录当前的可扣的所有的money
	}
	sort(save, save + num, cmp);
	priority_queue<ll, vector<ll>, greater<ll>>q;
	for (ll i = 0; i < num; i++)
	{
		q.push(save[i].val);//入队列
		if (q.size() > save[i].t)q.pop();//剔除队列
	}
	while (!q.empty()) {
		sum -= q.top();//减去那些可以不扣的money,剩下的就是必须扣的钱了
		q.pop();
	}
	cout << tot - sum << endl;
	return 0;
}

Ejemplo II
Leopard aprender Pa
entrada

Cada sujeto está consumiendo una unidad de tiempo para aprender, tiempo para empezar de cero, hay 1 mil millones por unidad de tiempo. En cualquier momento, cualquier tarea puede uno (números 1 ~ n) para aprender.
Para la tarea i, tengo una fecha límite Di, si la finalización de este curso, será capaz de adquirir conocimientos Pi.
En la tarea y plazos dada, el conocimiento que se puede obtener es el número máximo es?

exportación

La primera línea, un número entero n, denota el número de tareas
siguientes n líneas de dos números enteros, y Di Pi

Ejemplo de entrada

3
2 10
1 5
1 7

Salida de muestra
17

análisis
Esta pregunta es muy claro pensamiento, intelecto y navegar aún más sencillo, como esto directamente a cuánto valor se puede obtener
el código de abajo
Tiempo para AC

#include<unordered_map>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<utility>
#include<stdio.h>
#include<vector>
#include <stack>
#include<string>
#include<math.h>
#include<cmath>
#include<queue>
#include<map>
#pragma warning(disable:4244)
#define PI 3.1415926536
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll ll_inf = 9223372036854775807;
const int int_inf = 2147483647;
const short short_inf = 32767;
const char char_inf = 127;
inline ll read() {
	ll c = getchar(), Nig = 1, x = 0;
	while (!isdigit(c) && c != '-')c = getchar();
	if (c == '-')Nig = -1, c = getchar();
	while (isdigit(c))x = ((x << 1) + (x << 3)) + (c ^ '0'), c = getchar();
	return Nig * x;
}
inline void out(ll a)
{
	if (a < 0)putchar('-'), a = -a;
	if (a >= 10)out(a / 10);
	putchar(a % 10 + '0');
}
ll qpow(ll x, ll n, ll mod) {
	ll res = 1;
	while (n > 0) {
		if (n & 1)res = (res * x) % mod;
		x = (x * x) % mod; n >>= 1;
	}
	return res;
}
#define read read()
struct node {
	int val, t;
}save[100001];
bool cmp(node a, node b)
{
	return a.t < b.t;
}
int main()
{
	priority_queue<int, vector<int>, greater<int>>q;
	int n = read;
	for (int i = 0; i < n; i++)
	{
		save[i].t = read;
		save[i].val = read;
	}
	sort(save, save + n, cmp);
	for (int i = 0; i < n; i++)
	{
		q.push(save[i].val);
		if (save[i].t < q.size())q.pop();
	}
	ll ans = 0;
	while (!q.empty())
	{
		ans += q.top();
		q.pop();
	}
	cout << ans << endl;
	return 0;
}

Subproducto de la rueda mes

Publicado 32 artículos originales · ganado elogios 11 · vistas 1180

Supongo que te gusta

Origin blog.csdn.net/qq_35339563/article/details/104872057
Recomendado
Clasificación