SSL 2295——暗黑破坏神

本文介绍了一个关于游戏魔法升级的问题:玩家需要合理分配有限的金币来购买魔法书,以最大化所有魔法的效果值总和。文章提供了具体的输入输出示例,并附带了实现这一目标的简单背包问题算法。

Description

无聊中的小x玩起了Diablo I…

游戏的主人公有n个魔法

每个魔法分为若干个等级,第i个魔法有p[i]个等级(不包括0)

每个魔法的每个等级都有一个效果值,一个j级的i种魔法的效果值为w[i][j]

魔法升一级需要一本相应的魔法书

购买魔法书需要金币,第i个魔法的魔法书价格为c[i]

而小x只有m个金币(好孩子不用修改器)

你的任务就是帮助小x决定如何购买魔法书才能使所有魔法的效果值之和最大

开始时所有魔法为0级 效果值为0

Input

第一行 用空格隔开的两个整数n(0
以下n行 描述n个魔法

第i+1行描述 第i个魔法 格式如下(0
c[i] p[i] w[i][1] w[i][2] … w[i][p[i]]

Output

第一行输出一个整数,即最大效果

Sample Input

3 10
1 3 1 2 2
2 3 2 4 6
3 3 2 1 10
Sample Output

11
1
0
3
Hint

0< n< =100,0< m <=500,0 < p[i] <= 50,0 < c[i] <=10


简单的背包,主要就是记录路径,再递归输出


代码如下:

const
  maxn=500;
var
  f,a,b:array[0..maxn,0..maxn] of longint;
  c,p:array[0..maxn] of longint;
  i,j,k,n,m,maxf,x,y:longint;


procedure print(x,y:longint);
begin
  if x=0 then exit;
  print(x-1,y-b[x,y]*c[x]);
  writeln(b[x,y]);
end;


function max(x,y:longint):longint;
begin
  if x>y then exit(x) else exit(y);
end;


begin
  readln(n,m);
  for i:=1 to n do
    begin
      read(c[i],p[i]);
      for j:=1 to p[i] do
        read(a[i,j]);
      readln;
    end;
  for i:=1 to n do
    for j:=1 to m do
      begin
        f[i,j]:=f[i-1,j];
        for k:=0 to p[i] do
          begin
            if k*c[i]>j then break;
            if f[i,j]<f[i-1,j-k*c[i]]+a[i,k] then
              begin
                f[i,j]:=f[i-1,j-k*c[i]]+a[i,k];
                b[i,j]:=k;
              end;
          end;
      end;
  writeln(f[n,m]);
  for j:=m downto 1 do
    for i:=n downto 1 do
      if f[i,j]>=maxf then
        begin
          maxf:=f[i,j];
          x:=i;
          y:=j;
        end;
  print(x,y);
  for i:=x+1 to n do
    writeln(0); 
end.
为了使用 OpenSSL 生成一个支持多域名的自签名证书,可以按照以下步骤进行操作。首先,需要创建一个配置文件(例如 `openssl.cnf`),用于指定证书的详细信息,包括多个域名。 ### 生成自签名证书的步骤 1. **创建配置文件 `openssl.cnf`** 在配置文件中,指定多个域名(Subject Alternative Names,SAN)以支持多域名。以下是一个示例配置文件的内容: ```ini [ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name req_extensions = req_ext prompt = no [ req_distinguished_name ] C = CN ST = State L = City O = Organization OU = Organizational Unit CN = example.com [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = example.com DNS.2 = www.example.com DNS.3 = anotherdomain.com DNS.4 = www.anotherdomain.com ``` 2. **生成私钥和 CSR(Certificate Signing Request)** 使用以下命令生成私钥和证书签名请求(CSR): ```bash openssl req -new -keyout key.pem -out csr.pem -config openssl.cnf ``` 3. **生成自签名证书** 使用以下命令生成自签名证书: ```bash openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out cert.pem -extensions req_ext -extfile openssl.cnf ``` 这将生成一个有效期为 365 天的自签名证书,并且支持配置文件中指定的多个域名。 4. **验证证书内容** 使用以下命令查看证书的详细信息,确保所有配置的域名都包含在内: ```bash openssl x509 -in cert.pem -text -noout ``` ### 结果 生成的文件包括: - `key.pem`:私钥文件。 - `csr.pem`:证书签名请求文件。 - `cert.pem`:自签名证书文件。 通过上述步骤,可以成功生成一个支持多域名的自签名证书,用于 HTTPS 的 SSL 验证。 ### 相关问题 1. 如何在生成自签名证书时添加 IP 地址作为 SAN? 2. 如何将生成的自签名证书安装到 Web 服务器上? 3. 如何在浏览器中信任自签名证书? 4. 如何使用 OpenSSL 生成支持通配符域名的自签名证书?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值