每日算法—04

p1049裝箱問題

題目描述
有一個箱子容量爲V(正整數,0≤V≤20000),同時有n個物品(0<n≤30,每一個物品有一個體積(正整數)。
要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間爲最小。
輸入格式
1個整數,表示箱子容量
1個整數,表示有n個物品
接下來n行,分別表示這n個物品的各自體積
輸出格式
1個整數,表示箱子剩餘空間。
輸入輸出樣例
輸入
24
6
8
3
12
7
9
7
輸出
0java

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int w = sc.nextInt();
		int n = sc.nextInt();
		int[] ff = new int[n];
		for (int i = 0; i < ff.length; i++) {
			ff[i] = sc.nextInt();
		}
		int[] t = new int[w + 1];
		for (int i = 0; i < n; i++) {
			for (int j = w; j >= 0; j--) {
				if (j >= ff[i]) {
					t[j] = Math.max(t[j], t[j - ff[i]] + ff[i]);
				}
			}
		}
		System.out.println(w - t[w]);

	}

}

p1048採藥

題目描述
辰辰是個天資聰穎的孩子,他的夢想是成爲世界上最偉大的醫師。爲此,他想拜附近最有威望的醫師爲師。醫師爲了判斷他的資質,給他出了一個難題。醫師把他帶到一個處處都是草藥的山洞裏對他說:「孩子,這個山洞裏有一些不一樣的草藥,採每一株都須要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裏,你能夠採到一些草藥。若是你是一個聰明的孩子,你應該能夠讓採到的草藥的總價值最大。」code

若是你是辰辰,你能完成這個任務嗎?class

輸入格式
第一行有 22 個整數 TT(1≤T≤1000)和 MM(1≤M≤100),用一個空格隔開,T 表明總共可以用來採藥的時間,M 表明山洞裏的草藥的數目。
接下來的 M 行每行包括兩個在 1 到 100 之間(包括 1 和 100)的整數,分別表示採摘某株草藥的時間和這株草藥的價值。
輸出格式
輸出在規定的時間內能夠採到的草藥的最大總價值。
輸入輸出樣例
輸入
70 3
71 100
69 1
1 2
輸出
3
說明/提示
對於 30% 的數據,M≤10;
對於所有的數據,M≤100。import

import java.util.Scanner;

public class P1048採藥 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner (System.in);
		
		int []w=new int[105];
		int []val=new int[105];
		int []dp=new int[105];
		int t=sc.nextInt();int m=sc.nextInt();
		for(int i=1;i<=m;i++)
		{
			w[i]=sc.nextInt();val[i]=sc.nextInt();
			for(int j=t;j>=0;j--) 
	        {
	        	if(j>=w[i])
		        {
	        		dp[j]=Math.max(dp[j-w[i]]+val[i], dp[j]);
		        }
		    }
		 
		}
  
		System.out.println(dp[t]);
	}

}
相關文章
相關標籤/搜索