dp求三角形路径权值

问题:
7
3   8
8   1   0
2   7   4    4
4   5   2    6    5
求Max代码:
#include<cstdio>
#include<algorithm>
using namespace  std;
int dp[5][5];//开个二维数组存数据
int summax[5][5];//记录每个阶段的最大值
int main()
{
for(int i=0;i<=4;i++)
for(int j=0;j<=i;j++)
scanf("%d",&dp[i][j]);

for(int i=0;i<=4;i++)
summax[4][i]=dp[4][i];//记录最底层
for(int i=3;i>=0;i--)
for(int j=0;j<=i;j++)
{
   summax[i][j]=max(summax[i+1][j],summax[i+1][j+1])+dp[i][j];
 }
 printf("%d\n",summax[0][0]);
 }
 求Min代码:
 #include<cstdio>
#include<algorithm>
using namespace  std;
int dp[5][5];//开个二维数组存数据
int summin[5][5];//记录每个阶段的最大值
int main()
{
for(int i=0;i<=4;i++)
for(int j=0;j<=i;j++)
scanf("%d",&dp[i][j]);

for(int i=0;i<=4;i++)
summin[4][i]=dp[4][i];//记录最底层
for(int i=3;i>=0;i--)
for(int j=0;j<=i;j++)
{
   summin[i][j]=min(summin[i+1][j],summin[i+1][j+1])+dp[i][j];
 }
 printf("%d\n",summin[0][0]);
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个基于数组的哈夫曼树权值实现的示例代码,供您参考: ```c #include <stdio.h> #define MAX_NODE_NUM 1000 // 哈夫曼树节点结构体 typedef struct { int weight; // 权值 int parent; // 父节点 int leftChild; // 左孩子 int rightChild; // 右孩子 } HuffmanNode; // 构建哈夫曼树 void createHuffmanTree(HuffmanNode huffmanTree[], int weight[], int n) { int i, j, k; int min1, min2; // 初始化哈夫曼树 for (i = 0; i < 2 * n - 1; i++) { huffmanTree[i].parent = -1; huffmanTree[i].leftChild = -1; huffmanTree[i].rightChild = -1; } // 设置叶子节点的权值 for (i = 0; i < n; i++) { huffmanTree[i].weight = weight[i]; } // 构建哈夫曼树 for (i = 0; i < n - 1; i++) { min1 = min2 = MAX_NODE_NUM; k = 0; // 查找权值最小的两个节点 for (j = 0; j < n + i; j++) { if (huffmanTree[j].parent == -1 && huffmanTree[j].weight < min1) { min2 = min1; min1 = huffmanTree[j].weight; k = j; } else if (huffmanTree[j].parent == -1 && huffmanTree[j].weight < min2) { min2 = huffmanTree[j].weight; } } // 设置父节点 huffmanTree[k].parent = n + i; huffmanTree[n + i].weight = min1 + min2; // 设置左孩子和右孩子 for (j = 0; j < n + i; j++) { if (huffmanTree[j].parent == -1) { if (huffmanTree[j].weight == min1) { huffmanTree[j].parent = n + i; huffmanTree[n + i].leftChild = j; } else if (huffmanTree[j].weight == min2) { huffmanTree[j].parent = n + i; huffmanTree[n + i].rightChild = j; } } } } } int main() { int i; int weight[] = {5, 6, 8, 7, 15}; int n = sizeof(weight) / sizeof(weight[0]); HuffmanNode huffmanTree[MAX_NODE_NUM]; // 构建哈夫曼树 createHuffmanTree(huffmanTree, weight, n); // 输出哈夫曼树的权值 printf("Huffman Tree Weight:\n"); for (i = 0; i < 2 * n - 1; i++) { printf("%d ", huffmanTree[i].weight); } printf("\n"); return 0; } ``` 在这个代码中,`HuffmanNode` 结构体表示哈夫曼树的节点,包含权值、父节点、左孩子和右孩子等信息。`createHuffmanTree` 函数用于构建哈夫曼树,接收一个 `HuffmanNode` 数组 `huffmanTree`,一个整型数组 `weight` 表示每个叶子节点的权值,以及一个整数 `n` 表示叶子节点的个数。 在构建哈夫曼树的过程中,我们首先初始化哈夫曼树的节点信息,然后将叶子节点的权值设置到节点中。接着,我们进行 `n-1` 次迭代,在每一次迭代中查找权值最小的两个节点,并将它们合并为一个新的节点。最后,我们就可以得到一个完整的哈夫曼树。 在示例代码中,我们使用了一个数组来表示哈夫曼树,节点的下标就是节点的编号。在构建哈夫曼树的过程中,我们通过设置节点的 `parent`、`leftChild` 和 `rightChild` 等属性来表示节点之间的关系。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值