嗨嗨来咯咯 2022-02-26 18:22 采纳率: 0%
浏览 31

装饰珠动态规划算法哪里错啦?

哪里不对捏
import java.util.*;

public class DecorateBall {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[][] equip = new int[6][50];
        for(int i=0;i<6;i++) {
            String[] a = scan.nextLine().split(" ");
            for(int j=0;j<a.length;j++) {
                equip[i][j] = Integer.parseInt(a[j]);
            }
        }
        int skillNum = scan.nextInt();
        scan.nextLine();
        ArrayList<int[]> W = new ArrayList<>();
        for(int i=0;i<skillNum;i++) {
            int[] ball = new int[9];
            String[] a = scan.nextLine().split(" ");
            int aa = Integer.parseInt(a[1]);
            for(int j=0;j<aa+2;j++)
                ball[j] = Integer.parseInt(a[j]);
            W.add(ball);
        }
        Comparator<int[]> comparator = new Comparator<int[]>() {
            @Override
            public int compare(int[] o1,int[] o2) {
                return o1[0] - o2[0];
            }
        };
        Collections.sort(W,comparator);
        int w = 0;
        int[][] v = new int[skillNum][9];
        for(int i=0;i<6;i++)
            w += equip[i][0];
        //q是孔的等级
        int[] q = new int[w];
        int tool = 0;
        for(int i=0;i<6;i++)
            for(int j=0;j<equip[i][0];j++)
                q[tool++] = equip[i][j+1];
        //v是珠的等级和w(i)
        for(int i=0;i<skillNum;i++)
            for(int j=0;j<=W.get(i)[1]+1;j++)
                if(j == 0) v[i][j] = W.get(i)[0];
                else if(j == 1) v[i][j] = 0;
                else v[i][j] = W.get(i)[j];
        //dp
        int[][] dp = new int[skillNum+1][w+1];
        for(int i=0;i<skillNum+1;i++)
            dp[i][0] = 0;
        for(int i=0;i<w+1;i++)
            dp[0][i] = 0;
        scan.close();
        //开始
        for(int i=1;i<skillNum+1;i++) {
            int s = W.get(i-1)[1];
            for(int j=1;j<w+1;j++) {
                    int count = 0;
                    for(int k=0;k<j;k++) {
                        if(q[k]>=v[i-1][0]) count++;
                    }
                    int[] huisu = new int[s];
                    for(int k=1;j-k>=0;k++) {
                        if(k>s || k>count) {
                            Arrays.sort(huisu);
                            break;
                        }
                        else {
                            huisu[k-1] = dp[i-1][j-k] + v[i-1][1+k] - v[i-1][1];
                            Arrays.sort(huisu);
                        }
                    }
                    dp[i][j] = Math.max(dp[i-1][j], huisu[s-1]);
                }
        }
        System.out.println((int)dp[skillNum][w]);
    }
}




  • 写回答

2条回答 默认 最新

  • 关注

    一时半会确实很难看出来具体哪里的问题,可以参考下这个有思路和注释,希望对你有帮助:https://blog.csdn.net/little_White12/article/details/115094018

    评论

报告相同问题?

问题事件

  • 创建了问题 2月26日

悬赏问题

  • ¥20 搭建三相栅极电路后高侧浮动地VS存在电容特性
  • ¥20 云卓h12pro 数传问题
  • ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?
  • ¥20 海思 nnie 编译 报错
  • ¥50 决策面并仿真,要求有仿真结果图
  • ¥15 关于路由器的路由协议配置
  • ¥15 springboot接入微信支付SDK
  • ¥50 大区域的遥感影像匹配 怎么做啊
  • ¥15 求解答:pytorch跑yolov8神经网络受挫
  • ¥20 Js代码报错问题不知道怎么解决