zoukankan      html  css  js  c++  java
  • 算法题之创造新世界(动态规划)

    题目来源:牛客网

    众所周知计算机代码底层计算都是0和1的计算,牛牛知道这点之后就想使用0和1创造一个新世界!牛牛现在手里有n个0和m个1,给出牛牛可以创造的x种物品,每种物品都由一个01串表示。牛牛想知道当前手中的0和1可以最多创造出多少种物品。

    输入描述:

    输入数据包括x+1行:
    第一行包括三个整数x(2 ≤ x ≤ 20),n(0 ≤ n ≤ 500),m(0 ≤ m ≤ 500),以空格分隔
    接下来的x行,每行一个01串item[i],表示第i个物品。每个物品的长度length(1 ≤ length ≤ 50)

    输出描述:

    输出一个整数,表示牛牛最多能创造多少种物品

    输入例子:
    3 3 1
    1
    00
    100

    输出例子:
    2

    Java实现:

    import java.util.Scanner;
    
    public class Main
    {
        public static void main(String[] args)
        {
            Scanner scanner = new Scanner(System.in);
            int num_item = scanner.nextInt();
            int num_0 = scanner.nextInt();
            int num_1 = scanner.nextInt();
    
            int count = 0;
            int[] array_0 = new int[21];
            int[] array_1 = new int[21];
            for (int i = 1 ; i <= num_item; i++)
            {
                char[] array = scanner.next().toCharArray();
                for (char anArray : array)
                {
                    if (anArray == '0')
                        array_0[i]++;
                    else
                        array_1[i]++;
                }
            }
            scanner.close();
    
            //二维动态规划,背包问题
            int[][] dp = new int[501][501];
            for (int i = 1 ; i <= num_item; i++)
            {
                for (int j = num_0 ; j >= array_0[i] ; j--)
                {
                    for (int k = num_1 ; k >= array_1[i] ; k--)
                    {
                        dp[j][k] = Math.max(dp[j][k], dp[j-array_0[i]][k-array_1[i]]+1);
                        // 输出每一步的结果
                        //System.out.println("dp["+j+"]["+k+"] = Math.max(dp["+j+"]["+k+"], dp["+j+"-array_0["+i+"]]["+k+"-array_1["+i+"]]+1);");
                    }
                }
            }
            System.out.print(dp[num_0][num_1]);
        }
    }
    

      

  • 相关阅读:
    软工作业01 P18 第四题
    自我介绍
    进行代码复审训练
    源代码管理工具调查
    软工作业PSP与单元测试训练
    进行代码复审训练
    源代码管理工具
    软工作业PSP与单元测试训练
    作业
    第一堂课
  • 原文地址:https://www.cnblogs.com/shixiangwan/p/6730547.html
Copyright © 2011-2022 走看看