2018-08-12 字节跳动笔试

方法一:j,k表示两个人的分数,dp[j][k]表示团队积分

static void helper(int[][]score,int n,int total){
        int[][] dp=new int[total+1][total+1];
        for (int i = 0; i < dp.length; i++) {
            Arrays.fill(dp[i], Integer.MIN_VALUE);
        }
        dp[0][0]=0;
        for (int i = 0; i < n; i++) {
            for (int j = total; j >= 0; j--) {
                for (int k = total; k >= 0; k--) {
                    int t=Integer.MIN_VALUE;
                    if(j>=score[i][0]&&dp[j-score[i][0]][k]!=Integer.MIN_VALUE)t=Math.max(t, dp[j-score[i][0]][k]);
                    if(k>=score[i][0]&&dp[j][k-score[i][0]]!=Integer.MIN_VALUE)t=Math.max(t, dp[j][k-score[i][0]]);
                    if(t!=Integer.MIN_VALUE) {
                        t+=score[i][1];
                        dp[j][k]=Math.max(dp[j][k], t);
                    }
                }
            }
        }
        int max=0;
        for (int i = 0; i < dp.length; i++) {
            max=Math.max(max, dp[i][i]);
        }
        System.out.println(max);
        
    }

方法二:dp[i][j+total]表示到第i张牌时的团队积分,j为个人积分差值,因为j可能为负,所以要加偏移量,最后dp[n][total]就是到第n张牌且满足个人积分相等的团队积分

static void helper(int[][]score,int n,int total){
        int[][] dp=new int[n+1][total*2+1];
        for (int i = 0; i < dp.length; i++) {
            Arrays.fill(dp[i], Integer.MIN_VALUE);
        }
        dp[0][total]=0;
        for (int i = 1; i <= n; i++) {
            for (int j = total; j >=0 ; j--) {
                int temp=Integer.MIN_VALUE;
                if((j-score[i-1][0]>=0)&&dp[i-1][j-score[i-1][0]+total]!=Integer.MIN_VALUE) {
                    temp=Math.max(temp, dp[i-1][j-score[i-1][0]+total]);
                }
                    
                if((j+score[i-1][0]<=total)&&dp[i-1][j+score[i-1][0]+total]!=Integer.MIN_VALUE) {
                    temp=Math.max(temp, dp[i-1][j+score[i-1][0]+total]);
                }
                if(temp!=Integer.MIN_VALUE) {
                    temp+=score[i-1][1];
                    dp[i][j+total]=Math.max(temp , dp[i-1][j+total]);
                }
                
                System.out.println(dp[i][total]);
            }
            
        }
        System.out.println(dp[n][total]);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • 一个5岁左右的小女孩跟着爸爸来到24小时图书馆,遇到7岁左右的小姐姐,两个人玩了起来。小姐姐热情的给妹妹...
    擎天柱_6e9a阅读 236评论 0 0
  • 牙疼不是病,疼起来要人命。相信很多人都经历过牙疼的折磨,我也不例外,那种疼到现在想起来都有点害怕。所以保护牙齿很...
    沈姐说说阅读 187评论 0 0
  • 一朵云 无声的流动 是谁 在呼唤 是谁 在祈祷 一朵花 无声的盛开 是谁 在憧憬 是谁 ...
    紫夕浅兮阅读 159评论 0 0
  • 沙子是几亿年前的岩石 只可惜它已经散了 从手的五个指尖里漏下 爱情决不能用手捧着 否则它会慢慢消失的 用你的心还原...
    梦双眸阅读 297评论 0 6