POJ 1825/2279(Young/Mr. Young's Picture Permutations-杨氏矩阵和钩子公式)

本文探讨了杨氏矩阵的计数问题,介绍了满足特定条件的矩阵及其钩子公式,并提供了一个Java程序实现来计算不同形状的杨氏矩阵数量。

给出一个n行的矩阵,每一行有a[i]个数,总共有sum个数,要求每一个位置的数必须比上面的数和左面的数大,求总方案数.

转自acdreamers
杨氏矩阵又叫杨氏图表,它是这样一个矩阵,满足条件:
(1)如果格子(i,j)没有元素,则它右边和上边的相邻格子也一定没有元素。
(2)如果格子(i,j)有元素a[i][j],则它右边和上边的相邻格子要么没有元素,要么有元素且比a[i][j]大。
下面介绍一个公式,那就是著名的钩子公式。
对于给定形状,不同的杨氏矩阵的个数为:n!/(每个格子的钩子长度加1的积)。
其中钩子长度定义为该格子右边的格子数和它上边的格子数之和。

POJ 1825/2279

import java.io.*;
import java.util.*;
import java.math.*;

public class Main
{
    static BigInteger jie[] = new BigInteger[1000];
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int n;
        jie[0]=BigInteger.ONE;
        for(int i=1;i<=20*12;i++) jie[i]=jie[i-1].multiply(BigInteger.valueOf(i));
        while(cin.hasNextInt())
        {
            int a[] = new int[1000];
            n = cin.nextInt();
            if (n==0)break;
            BigInteger ans = BigInteger.ONE;
            int t=0;
            for(int i=1;i<=n;i++) {a[i]=cin.nextInt();t+=a[i];}
            for(int i=1;i<=n/2;i++) {
                int p=a[i];
                a[i]=a[n-i+1];
                a[n-i+1]=p;
            }
            ans=jie[t];
            for(int i=1;i<=n;i++)
                for(int j=1;j<=a[i];j++) {
                    int l=a[i]-j;
                    int p=i-1;
                    while(p>0&&a[p]>=j) {
                        l++;p--;
                        if(p==0) break;
                    }
//`                    System.out.println(l+1);i
                    ans=ans.divide(BigInteger.valueOf(l+1));
                }

            System.out.println(ans);
        }
    }
}
<think>我们有一个链接错误:ld: cannot find -lpng12 collect2: error: ld returned 1 exit status。 这明确指示在链接阶段,链接器(ld)无法找到名为 libpng12 的库文件(通常为 libpng12.so 或 libpng12.a)。 因此,用户缺少的是 libpng12 这个库文件,具体是针对目标平台(这里是ARM架构)的版本。 但是,根据之前的对话,用户已经在一个交叉编译环境中工作(使用arm-buildroot-linux-gnueabi工具链),所以我们需要确保这个库在交叉编译工具链的sysroot中可用。 因此,回答应集中在缺少的文件是什么以及如何解决这个缺失。 </think>您的错误信息明确表示链接器(`ld`)在编译过程中无法找到名为 **`libpng12` 的库文件**,导致链接失败并返回退出状态 1。以下是详细解析: ### 缺失的核心文件: 1. **动态链接库文件**:`libpng12.so`(共享对象文件) - 这是 PNG 图像处理库的 1.2 版本运行时文件 - 默认应位于工具链的库目录:`.../arm-buildroot-linux-gnueabi/lib/` 或 `/usr/lib/` - 检查是否存在:`find / -name libpng12.so* 2>/dev/null` 2. **静态链接库文件**:`libpng12.a`(归档文件) - 编译时需要的静态库版本 - 通常与动态库位于同一目录 3. **符号链接文件**: - 链接器可能要求 `libpng12.so` 指向具体版本(如 `libpng12.so.0.49.0`) - 检查符号链接:`ls -l /path/to/toolchain/lib/libpng12*` ### 根本原因: - **交叉编译环境缺失**:您的 ARM 工具链(`arm-buildroot-linux-gnueabi`)未包含 PNG 库的 ARM 架构版本 - **版本过时**:`libpng12` 是较旧版本(当前主流为 libpng16),可能已被系统移除 ### 解决方案: 1. **安装 ARM 版 libpng12**: ```bash # 查找 Buildroot 包(需在 Buildroot 目录) make menuconfig # 进入 Target packages → Libraries → Graphics → 选中 libpng → 指定版本 1.2.x make toolchain-rebuild ``` 2. **手动添加库文件**: - 从其他 ARM 设备复制 `libpng12.so` `libpng12.a` 到工具链的库目录: ```bash cp libpng12.* /home/wangrui66/.../arm-buildroot-linux-gnueabi/lib/ ``` 3. **强制链接兼容版本**(临时方案): ```bash ln -s /usr/lib/libpng.so /home/wangrui66/.../lib/libpng12.so ``` ### 验证是否解决: 重新编译时添加库搜索路径: ```bash gcc -L/home/wangrui66/.../arm-buildroot-linux-gnueabi/lib -lpng12 ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值