栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

算法设计与分析实验七:使用动态规划算法解决分组背包问题(java实现、hdu1712)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法设计与分析实验七:使用动态规划算法解决分组背包问题(java实现、hdu1712)

一、实验目
练习使用动态规划算法解决实际问题(使用Java语言实现)。

二、实验内容

【问题描述】

小明这学期有n门课程,他计划最多花m天学习。根据他在不同课程上花费的天数,他将获得不同的价值,求如何安排n门课程的m天可使价值最大化

【输入】

输入包含多个测试用例。每个测试用例的第1行都包含两个正整数n和m,分别表示课程数和天数。接下来是矩阵a[i][j],1<=i<=n<=100,1<=j<=n<=100,a[i][j]表示在第i门课程上花费j天将获得的价值。在n=0,m=0时结束输入。

【输出】

对每个测试用例,都单行输出获得的最大价值。

【示例】

输入样例:
一、实验目的

   练习使用动态规划算法解决实际问题(使用Java语言实现)。

二、实验内容

【问题描述】

小明这学期有n门课程,他计划最多花m天学习。根据他在不同课程上花费的天数,他将获得不同的价值,求如何安排n门课程的m天可使价值最大化

【输入】

输入包含多个测试用例。每个测试用例的第1行都包含两个正整数n和m,分别表示课程数和天数。接下来是矩阵a[i][j],1<=i<=n<=100,1<=j<=n<=100,a[i][j]表示在第i门课程上花费j天将获得的价值。在n=0,m=0时结束输入。

【输出】

对每个测试用例,都单行输出获得的最大价值。

【示例】

输入样例:

2 2
1 2
1 3
2 2
2 1
2 1
2 3
3 2 1
3 2 1
0 0

输出样例:

3
4
6

三、 程序代码
ACboy.java

package ACboys;

import java.util.Scanner;

public class ACboy {
    private int n;//n表示课程数
    private int m;//m表示可用天数
    private int[][] matrix;//二维数组存放学习课程对应天数可获得的价值
    private int[] dp;
    Scanner sc =new Scanner(System.in);
    public void total_function(){
        input1();
        while (n!=0&&m!=0){
            intputMatrix(n,m);
            solve();
            output();
            input1();
        }
        return;
    }
    private void input1(){//输入天数和课程数函数
        n=sc.nextInt();
        m=sc.nextInt();
    }
    private void intputMatrix(int courses,int days){//输入二维数组函数
        dp=new int[105];//重置dp数组
        matrix=new int[courses+1][days+1];//根据课程数和天数大小创建二维数组
        for(int i=1;i<=courses;i++){
            for(int j=1;j<=days;j++){
                matrix[i][j]=sc.nextInt();
            }
        }
    }
    private void solve(){
        for(int k=1;k<=n;k++){//遍历k门课程
            for(int i=m;i>=0;i--){//遍历使用的天数,因为是一维写,并且每门课程只能选择一种天数,所以要倒着遍历
                for(int j=1;j<=m;j++){//第k组门课程里的m种天数里面选择一个,
                    if(i>=j)
                        dp[i]=max(dp[i],dp[i-j]+matrix[k][j]);
                }
            }
        }
    }
    private int max(int a,int b){
        return a>b?a:b;
    }
    private void output(){
        System.out.println(dp[m]);
    }
}

test.java

package ACboys;

public class test {
    public static void main(String[] args) {
        ACboy aCboy=new ACboy();
        aCboy.total_function();
    }
}

四、 实验结果(含程序运行截图)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/657901.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号