您的位置:首页 > 编程语言

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

2016-12-18 21:21 274 查看
代码:

回朔法:

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 stub
Scanner 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
;
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
;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: