Outlier局外人


私信TA

用户名:uq_43497619115

访问量:1304

签 名:

等  级
排  名 10166
经  验 1047
参赛次数 0
文章发表 5
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:这道题采用01背包算法

注意事项:

参考代码:

public class test61 {
   public static void main(String[] args) {
       Scanner data=new Scanner(System.in);
       int T=data.nextInt();
       int M=data.nextInt();
       int[][] a=new int[M+1][T+1];//构建一个dp数组,用来存放最优解,创建该数组要比正常的大一,因为下面的循环是从1开始的
       int[] t=new int[M+1];//这个数组用来存放采各个药的时间,顺序不能变
       int[] v=new int[M+1];//这个数组用来存取各个药的价值,顺序不能变

//这个循环用来输入
       for (int i=1;i<M+1;i++){
           t[i]=data.nextInt();
           v[i]=data.nextInt();
       }

//这个循环用来计算最优解和存放最优解
       for (int i=1;i<M+1;i++){
           for (int j=0;j<T+1;j++){

//这个if用来比较,当前物品所需时间大于还剩余的时间
               if (t[i]>j){
                   a[i][j]=a[i-1][j];
               }else{
                   a[i][j]=max(a[i-1][j],a[i-1][j-t[i]]+v[i]);
               }
           }
       }

//最优解存放在最大的下标
       System.out.println(a[M][T]);
   }

   public static int max(int i, int b) {
       
       return i>b? i:b;
   }
}

 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区