java吧 关注:1,294,081贴子:12,827,196
  • 19回复贴,共1

动态规划,可请大神喝杯茶!

只看楼主收藏回复



1楼2021-06-11 17:03回复
    ** 你怎么又出题了,我觉得我要是再帮你写了,你要请我喝杯奶茶。


    2楼2021-06-11 17:27
    收起回复
      2026-01-10 03:26:04
      广告
      不感兴趣
      开通SVIP免广告
      大神何在哈


      3楼2021-06-11 17:27
      回复
        你的红包我收了

        完整代码:
        package day0611;
        import java.util.ArrayList;
        import java.util.List;
        public class Demo2 {
        static int max = 0;//最大价格
        static List<Integer> retls = new ArrayList<Integer>();//符合条件的那一组数据
        static int[] sn;
        static int[] vn;
        static int C;
        public static void main(String[] args) {
        //控制台输入过程自己完成
        int n = 4;
        sn = new int[]{2,3,4,7};//物品体积
        vn = new int[]{1,3,5,9};//物品价值
        C = 10;//总体积
        //用来放物品 里面存放的是sn的索引
        List<Integer> sl = new ArrayList<Integer>();
        putNext(sl);
        System.out.println("最大价值:"+max);
        System.out.println("放入的物品是:");
        for(int i:retls) {
        System.out.print(sn[i]+" ");
        }
        }
        static void putNext(List<Integer> sl) {
        for(int i=0;i<sn.length;i++) {
        sl.add(i);
        int volume = calculateS(sl);//计算现在的体积
        if(volume <= C) {//可以继续放
        //放之前获取max
        int value = calculateV(sl);//计算价格
        if(value > max) {
        max = value;
        retls = new ArrayList<Integer>();
        for(int j:sl) {
        retls.add(j);
        }
        }
        //继续放
        putNext(sl);//调用自己
        }
        //
        sl.remove(sl.size()-1);//移除最后放入的从而回溯
        }
        }
        //计算总体积
        static int calculateS(List<Integer> ls) {
        int sum = 0;
        for(int i:ls) {
        sum+= sn[i];
        }
        return sum;
        }
        //计算总价格
        static int calculateV(List<Integer> ls) {
        int sum = 0;
        for(int i:ls) {
        sum+= vn[i];
        }
        return sum;
        }
        }


        4楼2021-06-11 18:03
        收起回复
          转移方程不难吧


          来自Android客户端5楼2021-06-11 19:15
          回复
            price[i]=math.max(price[i],price[i-k])


            来自Android客户端6楼2021-06-11 19:18
            回复
              刚好最近在学。


              来自Android客户端7楼2021-06-12 11:19
              收起回复
                https://www.zhihu.com/question/23995189


                IP属地:浙江来自Android客户端8楼2021-06-12 14:28
                回复
                  2026-01-10 03:20:04
                  广告
                  不感兴趣
                  开通SVIP免广告
                  这玩意java没用


                  IP属地:广东来自Android客户端9楼2021-06-12 15:08
                  回复
                    自己百度搜动态规划吧,很经典的题了


                    IP属地:美国来自Android客户端11楼2021-06-13 16:21
                    回复
                      以前初二学过


                      IP属地:美国来自Android客户端12楼2021-06-13 16:21
                      回复
                        贪心算法.


                        IP属地:江苏13楼2021-12-24 11:04
                        回复