P1216 [USACO1.5] [IOI1994] Número de triángulos (Luogu)

Portal de título original

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Idea: La programación dinámica busca la solución óptima, este problema es más fácil de utilizar el método de solución inversa. Primero defina una variable y una matriz para almacenar el número de filas y la cantidad de filas de entrada, y luego seleccione una solución óptima para cada elemento en cada fila de abajo hacia arriba comenzando desde la penúltima fila de la matriz (desde la parte inferior izquierda Y seleccione el más grande en la parte inferior derecha), y luego agregue al elemento actual, y así sucesivamente, y finalmente envíe el elemento superior

Referencia de código

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1001;
int r,a[MAXN][MAXN];  //r为行数,数组存储每行的数
int main()
{
    
    
	cin>>r;
	//给数组赋值
	for(int i = 0;i < r;i++)
        for(int j = 0;j <= i;j++)
            cin>>a[i][j];
    //从倒数第二行开始从下往上寻找每个最优解
	for(int i = r-2;i >= 0;i--)
 		for(int j = 0;j <= i;j++)
            a[i][j]+=max(a[i+1][j],a[i+1][j+1]); //将左下方和右下方中较大的一个加到当前元素
    cout<<a[0][0]<<endl;
    return 0;
 }

Supongo que te gusta

Origin blog.csdn.net/Bertil/article/details/106818751
Recomendado
Clasificación