java蓝桥杯dfs,java蓝桥杯

核桃的数量

小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:

各组的核桃数量必须相同

各组内必须能平分核桃(当然是不能打碎的)

尽量提供满足1,2条件的最小数量(节约闹革命嘛)

import java.util.Scanner;

public class Main {

public static int gys(int a,int b) {

while(true) {

if(a%b==0) {

return b;

}else {

return gys(b,a%b);

}

}

}

public static void main(String args[]) {

Scanner sc = new Scanner(System.in);

int a = sc.nextInt();

int b = sc.nextInt();

int c = sc.nextInt();

int temp = gys(a,b);

temp = a*b/temp;

int t = gys(temp,c);

temp = temp*c/t;

System.out.println(temp);

}

}

打印十字图

import java.util.ArrayList;

import java.util.Scanner;

public class Main {

static int t;

public static boolean yuan(int a,int b,int c,int d) {

if(Math.abs(a-2*t-2)+Math.abs(b-2*t-2)>Math.abs(c-2*t-2)+Math.abs(d-2*t-2)) {

return true;

}

return false;

}

public static void main(String args[]) {

Scanner sc = new Scanner(System.in);

t = sc.nextInt();

int [][] m = new int[4*t+5][4*t+5];

for(int i=0;i

for(int j=0;j

m[i][j] = -1;

}

}

int[] sx = {2*t+2,2*t,2*t+1,2*t+3,2*t+4,2*t+2,2*t+2,2*t+2,2*t+2};

int[] sy = {2*t+2,2*t+2,2*t+2,2*t+2,2*t+2,2*t,2*t+1,2*t+3,2*t+4};

int[] dx = {1,1,1,0,-1,-1,-1,0};

int[] dy = {1,0,-1,-1,-1,0,1,1};

ArrayList ax = new ArrayList();

ArrayList ay = new ArrayList();

for(int i=0;i

ax.add(sx[i]);

ay.add(sy[i]);

m[sx[i]][sy[i]] = 1;

}

for(int n=0;n

//。

ArrayList tax = new ArrayList();

ArrayList tay = new ArrayList();

for(int in=0;in

for(int i=0;i

int tx = (int)ax.get(in)+dx[i];

int ty = (int)ay.get(in)+dy[i];

if(m[tx][ty]==-1) {

m[tx][ty] = 0;

tax.add(tx);

tay.add(ty);

}

}

}

ax = tax;

ay = tay;

ArrayList ttax = new ArrayList();

ArrayList ttay = new ArrayList();

for(int in=0;in

for(int i=0;i

int tx = (int)ax.get(in)+dx[i];

int ty = (int)ay.get(in)+dy[i];

if(m[tx][ty]==-1) {

m[tx][ty] = 1;

ttax.add(tx);

ttay.add(ty);

}

}

}

ax = ttax;

ay = ttay;

}

for(int i=0;i

for(int j=0;j

if(m[i][j]==1) {

System.out.print('$');

}else {

System.out.print('.');

}

}

System.out.println();

}

}

}

import java.util.ArrayList;

import java.util.Scanner;

public class Main {

//static int[] m = new int[10];

static ArrayList a = new ArrayList();

static int[] dic = new int[10];

; public static void dabiao(int n,int cur) {

if(n==10) {

a.add(cur);

}else if(n==1){

for(int i=1;i<10;i++) {

dic[i] = 1;

dabiao(2,i);

dic[i] = 0;

}

}else {

for(int i=1;i<10;i++) {

if(dic[i]==0) {

dic[i] = 1;

dabiao(n+1,cur*10+i);

dic[i] = 0;

}

}

}

}

public static int qu(int target,int x,int y,int z) {

int res = 0;

for(int i=0;i

int temp = (int)a.get(i);

int num1 = temp%(int)Math.pow(10,z);

temp = temp/(int)Math.pow(10,z);

int num2 = temp%(int)Math.pow(10,y);

temp = temp/(int)Math.pow(10,y);

int num3 = temp%(int)Math.pow(10,x);

if(num2%num1!=0) {

continue;

}

double num = num3 + num2/num1;

if(target==num) {

//System.out.println(num3);

//System.out.println(num2);

//System.out.println(num1);

res++;

}

}

return res;

}

public static void main(String args[]) {

for(int i=0;i

dic[i] = 0;

}

dabiao(1,0);

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int res = 0;

if(n/10==0) {

res = qu(n,1,4,4);

}else if(n/100==0) {

res = qu(n,1,5,3) + qu(n,2,4,3)+qu(n,1,4,4)+qu(n,1,6,2);

}else if(n/1000==0) {

res = qu(n,3,3,3) + qu(n,2,5,2) + qu(n,1,5,3) + qu(n,3,4,2)+qu(n,2,4,3);

}else if(n/10000==0) {

res = qu(n,1,6,2) + qu(n,4,4,1) + qu(n,4,3,2)+qu(n,3,3,3)+qu(n,2,5,2);

}else if(n/100000==0) {

res = qu(n,2,6,1) + qu(n,5,2,2) + qu(n,5,3,1)+qu(n,1,6,2)+qu(n,4,4,1)+qu(n,4,3,2);

}else if(n/1000000==0) {

res = qu(n,1,7,1) + qu(n,6,2,1)+qu(n,2,6,1)+qu(n,5,2,2)+qu(n,5,3,1);

}else if(n/10000000==0) {

res = qu(n,7,1,1)+qu(n,1,7,1)+qu(n,6,2,1);

}else if(n/100000000==0) {

res = qu(n,7,1,1)+qu(n,1,7,1)+qu(n,6,2,1);

}

System.out.println(res);

}

/**

public static void main(String args[]) {

System.out.println(39176/425);

}

**/

}

import java.util.ArrayList;

import java.util.Scanner;

public class Main {

static int[][] row = new int[6][6];

static int[][] col = new int[6][6];

static int[][] area = new int[6][6];

static int[][] map = new int[6][6];//得到分区号

static char[][] value = new char[6][6];

static ArrayList list = new ArrayList();

static void init() {

for(int i=0;i<6;i++) {

for(int j=0;j<6;j++) {

row[i][j] = -1;

col[i][j] = -1;

map[i][j] = -1;

area[i][j] = -1;

value[i][j] = '0';

}

}

}

static void readip(String[] a,String[] b) {

for(int i=0;i

for(int j=0;j

map[i][j] = a[i].charAt(j)-'0';

}

}

for(int i=0;i

int x = b[i].charAt(0)-'0';

int y = b[i].charAt(1) -'0';

int z = b[i].charAt(2)-'A';

row[x][z] = 1;

col[y][z] = 1;

area[map[x][y]][z] = 1;

value[x][y] = b[i].charAt(2);

}

}

static boolean check(int step,int v) {

int x = step/6;

int y = step%6;

for(int i=0;i<6;i++) {

if(row[x][v]==1||col[y][v]==1||area[map[x][y]][v]==1) {

return false;

}

}

return true;

}

static void dfs(int step) {

if(step==36) {

StringBuilder sb = new StringBuilder("");

for(int i=0;i<6;i++) {

for(int j=0;j<6;j++) {

sb.append(value[i][j]);

}

}

list.add(sb.toString());

return;

}

int x = step/6;

int y = step%6;

if(value[x][y]!='0') {

dfs(step+1);

return;

}

for(int i=0;i<6;i++) {

if(check(step,i)) {

row[x][i]=1;

col[y][i]=1;

area[map[x][y]][i]=1;

value[x][y]=(char)('A'+i);

/**

for(int m=0;m<6;m++) {

for(int n=0;n<6;n++) {

System.out.print(value[m][n]);

}

System.out.println();

}

**/

dfs(step+1);

row[x][i]=-1;

col[y][i]=-1;

area[map[x][y]][i]=-1;

value[x][y]='0';

}

}

}

static void show() {

for(int i=0;i

String str = list.get(i);

System.out.println(i+1);

for(int j=0;j<6;j++) {

for(int k=0;k<6;k++) {

System.out.print(str.charAt(j*6+k));

if(k!=5) {

System.out.print(" ");

}else {

System.out.println();

}

}

}

}

}

public static void main(String[] args) {

init();

Scanner sc = new Scanner(System.in);

String[] a = new String[6];

for(int i=0;i<6;i++) {

String tmp = sc.nextLine();

a[i] = tmp;

}

int n = sc.nextInt();

sc.nextLine();

String[] b = new String[n];

for(int i=0;i

String tmp = sc.nextLine();

b[i] = tmp;

}

readip(a,b);

dfs(0);

show();

}

}

疑问:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

long[] m = new long[30100];

int[] v = new int[40];

int[] s = new int[40];

Scanner sc = new Scanner(System.in);

int money = sc.nextInt();

int n = sc.nextInt();

for(int i=0;i

m[i] = 0;

}

sc.nextLine();

for(int i=0;i

int a = sc.nextInt();

int b= sc.nextInt();

v[i] = a*b;

s[i] = a;

sc.nextLine();

}

for(int i=0;i

for(int j=money;j>=s[i];j--) {

m[j] = Math.max(m[j], m[j-s[i]]+v[i]);

}

}

System.out.println(m[money]);

}

}

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int m = sc.nextInt();

int[] v = new int[m + 1];

int[] w = new int[m + 1];

int[][] f = new int[m + 1][n + 1];

for(int i = 1;i <= m;i++){

v[i] = sc.nextInt();

w[i] = sc.nextInt();

}

for(int j = 0;j < n;j++){

f[0][j] = 0;

}

for(int i = 1;i <= m;i++){

for(int j = 0;j <= n;j++){

f[i][j] = f[i-1][j];

if(j >= v[i]){

f[i][j] = Math.max(f[i - 1][j],f[i-1][j - v[i]] + v[i] * w[i]);

}

}

}

System.out.println(f[m][n]);

}

}

这两个写法有什么区别???

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值