提交 f20c4f81 编写于 作者: qq_36480062's avatar qq_36480062

c

上级 247d24fb
......@@ -8,6 +8,7 @@ import static java.lang.System.in;
/**
* https://www.acwing.com/problem/content/156/
* 滑动窗口
* 给定一个大小为n≤106
* 的数组。
* 有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。
......
......@@ -55,4 +55,4 @@ public class 兑换硬币 {
}
return f[n];
}
}
}
\ No newline at end of file
......@@ -35,7 +35,7 @@ import java.util.Scanner;
* 属性: max 最大价值
* 状态划分:所有包含第i个物品的选法,所有不包含物品i的选法
* 不选第i个物品:f[i-1,j,k]
* 包含第i个物品:f[i-1,j-v[i],k-m[i]]]+w[i
* 包含第i个物品:f[i-1,j-v[i],k-m[i]]]+w[i]
* |_______| + 物品i
* |_______| + 物品i
* |_______| + 物品i
......
......@@ -40,7 +40,7 @@ public class 混合背包 {
} else {
if (t[i] == -1) t[i] = 1;
for (int k = 1; k <= t[i]; k *= 2) {
for (int j = V; j >= k * v[i]; j--) {
for (int j = V; j >= k * v[i]; j--) {//把k个物品看成可选可不选的一个物品,01背包
f[j] = Math.max(f[j], f[j - k * v[i]] + w[i] * k);
}
t[i] -= k;
......
......@@ -46,6 +46,11 @@ import java.util.Scanner;
* 10表示只买第二个附件。其它过程与分组背包完全一致,只需要注意价格和价值的累加即可。
* 分组背包:把每一个主件与附件的组合看成一个组
* 状态定义:f[i,j]代表前i种主件可选价值不超过j的所有方案
* 二进制枚举所有主件和附件的所有组成方案
* 可以算出价值和体积
* 状态划分:不选第i种组件,f[i-1,j]
* 选第i种主件:f[i-1,j-v]+w 和第一个附件f[i-1,j-v]+w .... 或者不选第一个附件,选第二个附件...
*
*/
public class 金明的预算方案 {
static class node {
......@@ -76,7 +81,7 @@ public class 金明的预算方案 {
int t, e;
for (int i = 1; i <= n; i++) {
if (zhu[i] != null) {//是主件
for (int j = m; j >= 0; j--) {
for (int j = m; j >= 0; j--) {//枚举体积
for (int k = 0; k < 1 << fu[i].size(); k++) {//有哪些附件,二进制枚举所有选和不选的情况
t = zhu[i].v;
e = zhu[i].m;
......
package basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
/**
* 是否存在取4个数和为m
* n=3
* m=10
* k=1 3 5
* 输出yes 1 1 3 5结果为10
*/
public class 抽签 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
for (int i = 0; i < n; i++) {
k[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
list.add(k[i] + k[j]);
}
}
Collections.sort(list);
boolean f=false;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (Collections.binarySearch(list,m-k[i]-k[j])>0){
f=true;
break;
}
}
}
if (f) System.out.println("yes");
else System.out.println("no");
}
static ArrayList<Integer> list = new ArrayList<Integer>();
static int[] k = new int[1000];
static int n, m;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册