01背包
import java.util.Scanner;
public class 零一背包问题 {
public static int n,m;
public static int[] v=new int[1010];
public static int[] w=new int[1010];
public static int[] res=new int[1010];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
for(int i=1;i<=n;i++)
{
v[i]=sc.nextInt();
w[i]=sc.nextInt();
}
for (int j=1;j<=n;j++) {
for(int i=m;i>=v[j];i--)
{
res[i]=Math.max(res[i], res[i-v[j]]+w[j]);
}
}
System.out.println(res[m]);
}
}
完全背包
import java.util.Scanner;
public class 完全背包 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int V=sc.nextInt();
int[] v=new int[N+1];
int[] w=new int[N+1];
for(int i=1;i<=N;i++) {
v[i]=sc.nextInt();
w[i]=sc.nextInt();
}
int[][] dp=new int[N+1][V+1];
for(int i=1;i<=N;i++) {
for(int j=0;j<=V;j++) {
dp[i][j]=dp[i-1][j];
if(j>=v[i]) {
dp[i][j]=Math.max(dp[i][j],dp[i][j-v[i]]+w[i] );
}
}
}
System.out.println(dp[N][V]);
}
}
多重背包
import java.util.Scanner;
public class 多重背包问题 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int N=scanner.nextInt();
int V=scanner.nextInt();
int[] v=new int[N];
int[] w=new int[N];
int[] s=new int[N];
for(int i=0;i<N;i++) {
v[i]=scanner.nextInt();
w[i]=scanner.nextInt();
s[i]=scanner.nextInt();
}
int[] dp=new int[V+1];
dp[0]=0;
for(int i=0;i<N;i++) {
for(int j=V;j>=0;j--) {
for(int k=0;k<=s[i]&&k*v[i]<=j;k++) {
dp[j]=Math.max(dp[j],dp[j-k*v[i]]+k*w[i]);
}
}
}
System.out.println(dp[V]);
}
}
寻找重复数
public class 寻找重复数 {
public int findDuplicate(int[] nums) {
if(nums==null||nums.length==0) {
return -1;
}
int left=1;
int right=nums.length-1;
while(left<right) {
int mid=(left+right)/2;
int count=getCount(nums,left,mid);
if(count>(mid-left+1)) {
right=mid;
}else {
left=mid+1;
}
}
return left;
}
public int getCount(int[] nums,int left,int right) {
int count=0;
for(int num:nums) {
if(num>=left&&num<=right) {
count++;
}
}
return count;
}
}
找出数组中重复的数字
public class 找出数组中重复的数字 {
public static int findRepeatNumber(int[] nums) {
if(nums==null||nums.length==0) {
return -1;
}
for(int i=0;i<nums.length;i++) {
if(nums[i]<0||nums[i]>nums.length-1) {
return -1;
}
}
int[] temp=new int[nums.length];
for(int i=0;i<nums.length;i++) {
temp[nums[i]]++;
}
for(int i=0;i<temp.length;i++) {
if(temp[i]>1) {
return i;
}
}
return -1;
}
}
替换空格
public class 替换空格 {
public String replaceSpaces(StringBuffer str) {
StringBuffer sb=new StringBuffer();
for(int i=0;i<str.length();i++) {
if(str.charAt(i)==' ') {
sb.append("%20");
}
else {
sb.append(str.charAt(i));
}
}
return sb.toString();
}
}