소 가방 문제 - 01 가방 문제
1917 단어 데이터 구조
소 와 소의 배낭 문제 - 소 객 망 문제 설명: 소 와 소 는 학교 에서 조직 한 봄 여행 에 참가 하려 고 한다. 출발 하기 전에 소 와 소 는 가방 에 간식 을 넣 으 려 고 한다. 소의 가방 용량 은 w 이다.
소 와 소의 집 에는 모두 n 봉지 의 간식 이 있 는데, i 봉지 의 간식 부 피 는 v [i] 이다.
소 와 소 는 총 부피 가 가방 용량 을 초과 하지 않 는 상황 에서 그 가 모두 몇 가지 간식 을 넣 는 지 알 고 싶 어 한다.
입력 설명: 두 줄 의 첫 번 째 행동 두 개의 정수 n 과 w (1 < = n < = 30, 1 < = w < = 2 * 10 ^ 9) 를 입력 하여 간식 의 수량 과 가방 의 용량 을 표시 합 니 다.두 번 째 줄 n 개의 정수 v [i] (0 < = v [i] < = 10 ^ 9) 는 간식 한 봉지 의 부 피 를 나타 낸다.
2 프로 그래 밍 실현
package com.cow;
import java.util.Scanner;
/*
21 1165911996
842104736 130059605 359419358 682646280 378385685 622124412 740110626 814007758 557557315 40153082 542984016 274340808 991565332 765434204 225621097 350652062 714078666 381520025 613885618 64141537 783016950
*/
public class Cow {
private static int methodNum = 0;
public static void main(String[] args) {
int n;
Long w;// : N , int 。
Scanner input = new Scanner(System.in);
n = input.nextInt();
w = input.nextLong();
input.nextLine();// , 。
String line = input.nextLine();// ,
input.close();
String[] splitLine = line.split(" ");
int[] v = new int[n+1];
Long total = 0L;
for (int i = 0; i < splitLine.length; i++) {
v[i + 1] = Integer.parseInt(splitLine[i]);
total += v[i + 1];
}
if(total <= w) methodNum = (int) Math.pow(2, n);
else {
calMethodNum(n,w,v,0L,1); // 0, 1
}
System.out.println(methodNum);
}
private static void calMethodNum(int n, Long w, int[] v,Long sum,int loc) {
if(sum > w) {
return;
}
if(sum <= w) {
methodNum ++;
}
for(int i=loc;i<=n;i++) {// i , 。
if(w - sum > v[i]) {// i , 。
calMethodNum(n, w, v, sum + v[i], i+1);
}
// if , i+1 , 。 if , i 。
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.