• LC 5604. Maximize Grid Happiness


    link

    class Solution {
    public:
        int memo[5][5][7][7][1<<10];
        int getMaxGridHappiness(int m, int n, int introvertsCount, int extrovertsCount) {
            memset(memo,-1,sizeof(memo));
            return dfs(0,0,m,n,introvertsCount,extrovertsCount,0);
        }
    
        int dfs(int i, int j, int m, int n, int ins, int exs, int state){
            if(j==n){
                return dfs(i+1,0,m,n,ins,exs,state);
            }
            if(i==m || (ins==0 && exs==0)){
                return 0;
            }
    
            if(memo[i][j][ins][exs][state]!=-1) return memo[i][j][ins][exs][state];
            int res=dfs(i,j+1,m,n,ins,exs,state>>2);
    
            if(ins>0){
                int tmp=120;
                if(i>0 && state&1){
                    tmp-=30;
                    if(state&2){
                        tmp+=20;
                    }else{
                        tmp-=30;
                    }
                }
                if(j>0 && state&(1<<(2*(n-1)))){
                    tmp-=30;
                    if(state&(1<<(2*(n-1)+1))){
                        tmp+=20;
                    }else{
                        tmp-=30;
                    }
                }
                res=max(res,tmp+dfs(i,j+1,m,n,ins-1,exs,(state>>2)|(1<<2*(n-1)) ));
            }
    
            if(exs>0){
                int tmp=40;
                if(i>0 && state&1){
                    tmp+=20;
                    if(state&2){
                        tmp+=20;
                    }else{
                        tmp-=30;
                    }
                }
                if(j>0 && state&(1<<(2*(n-1)))){
                    tmp+=20;
                    if(state&(1<<(2*(n-1)+1))){
                        tmp+=20;
                    }else{
                        tmp-=30;
                    }
                }
                res=max(res,tmp+dfs(i,j+1,m,n,ins,exs-1,(state>>2)|(1<<2*(n-1))|(1<<(2*(n-1)+1) )));
            }
            return memo[i][j][ins][exs][state]=res;
        }
    };
    
  • 相关阅读:
    MVC,MVP和MVVM的区别
    将数组里某个属性相同的对象合并成一个数组
    Ajax的理解
    VUE如何关闭Eslint的方法
    数组去重
    vue-router传递参数的几种方式
    密码的显示和隐藏
    "校园易借查询"选题报告
    我的第一个微信好友分析
    数据库实践
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/13983592.html
Copyright © 2020-2023  润新知