今日头条编程之——K-SUM

来源:互联网 发布:远光java面试题 编辑:程序博客网 时间:2024/04/24 03:57

代码:

回朔法:

import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);while(sc.hasNextInt()){int n=sc.nextInt();int m=sc.nextInt();int k=sc.nextInt();List<Node> nodelist=new ArrayList<Node>();for(int i=0;i<k;i++){Node node=new Node(n);for(int j=0;j<n;j++){node.num[j]=sc.nextInt();}nodelist.add(node);}System.out.println(GetCount(nodelist,m,n));}}public static int GetCount(List<Node> nodelist,int m,int count){   int result=0;   int k = 0;// Node 下标       int n = nodelist.size();//Node 个数       int[] index = new int[n];       for (int j = 0; j < n; j++)       {           index[j] = -1;       }       //这是主要的回朔       int tempsum = 0;       while (k >= 0){       index[k]++;       if(index[k]<count){       tempsum+=nodelist.get(k).num[index[k]];               if (k == n - 1){                   if (tempsum > m){                       result++;                   }                    tempsum-=nodelist.get(k).num[index[k]];                   continue;               }else{                   k = k + 1;               }       }else{       index[k] = -1;       k=k-1;       tempsum=0;       }       }     return result;   }}class Node{int[] num;public Node(int n){num=new int[n];}}


0 0
原创粉丝点击