A。所有ai求和的值大于S,则输出NO,其余输出YES
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
public class Codeforces {
public static void main(String[] args) {
new TaskA().run();
}
}
class TaskA {
Scanner in = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
public void run() {
int n = in.nextInt();
int s = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; ++i) {
arr[i] = in.nextInt();
}
Arrays.sort(arr);
int sum = 0;
for (int i = 0; i < n-1; ++i) {
sum += arr[i];
}
if (sum > s) {
out.println("NO");
} else {
out.println("YES");
}
out.flush();
}
}
B.暴力枚举b的行数,判断是否能构成a。
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
public class Codeforces {
public static void main(String[] args) {
new TaskB().run();
}
}
class TaskB {
Scanner in = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
int[][] a;
int n,m;
public void run() {
n = in.nextInt();
m = in.nextInt();
a = new int[n][m];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
a[i][j] = in.nextInt();
}
}
int ans = 1;
while(ans < n && !judge(ans))++ans;
out.println(ans);
out.flush();
}
boolean judge(int k) {
if (2*k > n) {
return false;
}
for (int i = 0; i < k; ++i) {
for (int j = 0; j < m; ++j) {
if (a[i][j] != a[2*k-1-i][j]) {
return false;
}
}
}
if (2*k == n)return true;
return judge(k*2);
}
}
C。暴力枚举结果的起点和终点,将区间内的数于区间外的数交换,求最大值。
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
public class Codeforces {
public static void main(String[] args) {
new TaskC().run();
}
}
class TaskC {
Scanner in = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
int[] a;
int n,m;
public void run() {
n = in.nextInt();
m = in.nextInt();
a = new int[n];
int ans = 0xafffffff;
for (int i = 0; i < n; ++i) {
a[i] = in.nextInt();
}
for (int i = 0; i < n; ++i) {
for (int j = i; j < n; ++j) {
ans = Math.max(ans,judge(i,j));
}
}
out.println(ans);
out.flush();
}
void asign(int begin, int l, int r, int[] arr) {
for (int i = l; i <= r; ++i) {
arr[begin] = a[i];
begin++;
}
}
int judge(int l, int r) {
int[] cal = new int[r-l+1];
asign(0, l, r, cal);
if (cal.length < n) {
int[] lef = new int[n-cal.length];
asign(0, 0, l-1, lef);
asign(l, r+1, n-1, lef);
Arrays.sort(cal);
Arrays.sort(lef);
int j = lef.length-1;
for (int i = 0; i < cal.length && j >= 0 && lef[j] >= cal[i] && lef.length-1-j < m; ++i) {
cal[i] = lef[j];
--j;
}
}
int ret = 0;
for (int i = 0; i < cal.length; ++i) {
ret += cal[i];
}
return ret;
}
}