动态规划&贪心算法

动态规划问题,问题可以分为子问题的最优解,从而递归下去。也可以自下而上的循环来解决,就是找到递归的终点,从递归的终点向上。

package jzof_ex;

public class Jzof_14 {

    public int maxProductCut(int length) {
        if(length<2) {
            return 0;
        }
        if(length==2) {
            return 1;
        }
        if(length==3) {
            return 2;
        }
        int[] product=new int[length+1];
        product[0]=0;
        product[1]=1;
        product[2]=2;
        product[3]=3;
        int max=0;
        for(int i=4;i<=length;i++) {
            max=0;
            for(int j=1;j<=i/2;j++) {
                int temp=product[j]*product[i-j];
                if(max<temp) {
                    max=temp;
                }
            }
            product[i]=max;
        }
        return product[length];
    }
}

矩阵取数的问题
一个N*N的矩阵,要找到路径和最大的,只能向下或者向右走

package jzof_ex;
import java.util.*;
/*
 * 矩阵取数,使得路径的和最大,只能向下或者向右走
 * 20
142 59 82 68 134 88 43 39 134 142 180 29 85 77 189 35 98 98 145 68
61 19 7 136 48 150 99 20 171 68 190 157 117 4 40 73 162 30 80 90
120 186 122 135 192 70 127 48 74 75 23 20 27 174 75 124 52 146 20 183
189 23 67 67 152 23 112 82 38 117 72 68 18 56 148 75 96 71 144 177
24 51 146 97 46 170 131 142 129 115 21 17 11 96 101 98 120 56 183 169
158 46 11 156 3 154 2 170 27 199 29 180 3 43 160 138 76 170 22 181
92 169 152 122 96 56 58 122 155 50 155 40 88 174 20 177 40 189 94 91
168 160 115 129 87 40 15 167 135 162 22 150 35 2 77 188 93 89 60 147
97 80 15 176 45 188 93 28 24 182 98 87 76 130 14 132 55 23 35 57
42 90 186 193 29 6 6 86 98 31 85 151 129 147 193 88 145 138 85 99
147 186 144 152 65 134 74 104 188 145 134 70 54 4 105 8 93 22 148 39
182 7 130 192 98 146 157 129 137 125 186 116 138 136 109 55 145 35 129 94
131 102 97 152 97 16 98 125 42 186 195 123 190 46 116 140 57 152 55 118
177 145 167 64 159 18 132 117 95 50 62 59 93 54 108 81 109 178 96 83
49 32 87 150 129 63 126 92 21 168 198 193 180 11 117 186 134 34 193 80
83 181 31 191 125 137 31 136 138 35 31 79 56 172 70 145 58 18 134 96
91 40 96 126 52 68 79 83 137 122 147 76 185 17 199 67 2 96 25 192
33 189 154 185 138 120 137 9 141 171 128 117 99 97 188 43 85 105 140 57
59 148 199 17 88 155 94 40 172 3 144 162 192 141 63 101 86 111 188 131
130 70 141 165 193 30 176 88 28 156 182 97 155 168 134 85 190 137 98 182
5559
 */
public class GetNumOfMatrix {

    //递归的实现,矩阵小的时候还可以,20*20的似乎就跑不了了
    public int maxPath(int[][] arr,int i,int j) {
        if(i==0|j==0) {
            if(i==0&&j!=0) {
                return maxPath(arr,0,j-1)+arr[0][j];
            }else if(i!=0&&j==0) {
                return maxPath(arr,i-1,0)+arr[i][0];
            }else{
                return arr[0][0];
            }
        }else {
            return Math.max(maxPath(arr,i-1,j),maxPath(arr,i,j-1))+arr[i][j];
        }
    }
    
    //非递归的实现,其实就是中间结果有存储起来,递归太深了
    //可以考虑下具体是怎样的,当要找到这条路径的时候
    public static void main(String[] args) {
        // TODO 自动生成的方法存根

        Scanner sc=new Scanner(System.in);
        int N=sc.nextInt();
        int[][] arr=new int[N][N];
        for(int i=0;i<N;i++) {
            for(int j=0;j<N;j++) {
                arr[i][j]=sc.nextInt();
            }
        }
        int[][] sum=new int[N][N];
        sc.close();
        for(int i=0;i<N;i++) {
            for(int j=0;j<N;j++) {
                if(i!=0&&j!=0) {
                    if(sum[i-1][j]>sum[i][j-1]) {
                        sum[i][j]=sum[i-1][j]+arr[i][j];
                    }else {
                        sum[i][j]=sum[i][j-1]+arr[i][j];
                    }
                }else {
                    if(i==0&&j!=0) {
                        sum[i][j]=sum[i][j-1]+arr[i][j];
                    }else if(i!=0&&j==0) {
                        sum[i][j]=sum[i-1][j]+arr[i][j];
                    }else {
                        sum[i][j]=arr[i][j];
                    }
                }
            }
        }
        System.out.println(sum[N-1][N-1]%2147483647);
    }

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容