青蛙的约会
public class Demo {
public int SSavep(char[][] visited, int t, int n, int m) {
int[][] map = new int[visited.length][visited[0].length];
int startx=0, starty=0, endx=0, endy=0;
for (int i = 0; i < visited.length; i++) {
for (int j = 0; j < visited[0].length; j++) {
map[i][j] = Integer.MAX_VALUE;
if ('P' == visited[i][j]) {
endx = i;
endy = j;
} else if ('S' == visited[i][j]) {
map[i][j] = 0;
startx = i;
starty = j;
}
}
}
// 从开始位置计算所有表格的值
mark(visited, map, startx, starty - 1); // 左
mark(visited, map, startx - 1, starty); // 上
mark(visited, map, startx, starty + 1); // 右
mark(visited, map, startx + 1, starty); // 下
// 获取公主位置的值
int minStep = map[endx][endy];
return minStep <= t ? 0 : -1;
}
// 根据周边的值计算自己最小的值,如果自己的值改变,则重新计算周边的值
private void mark(char[][] visited, int[][] map, int x, int y) {
if (x < 0 || x >= map.length || y < 0 || y >= map[0].length) {
return;
}
if(visited[x][y] == '*') {
return;
}
int newValue = getArroundMin(map, x, y) + 1;
if (newValue < map[x][y]) {
map[x][y] = newValue;
mark(visited, map, x, y - 1); // 左
mark(visited, map, x - 1, y); // 上
mark(visited, map, x, y + 1); // 右
mark(visited, map, x + 1, y); // 下
}
}
// 计算周围最小的值
private int getArroundMin(int[][] map, int x, int y) {
int min = Integer.MAX_VALUE;
// 左
if (y > 0) {
min = Math.min(min, map[x][y - 1]);
}
// 上
if (x > 0) {
min = Math.min(min, map[x - 1][y]);
}
// 右
if (y < map[0].length - 1) {
min = Math.min(min, map[x][y + 1]);
}
// 下
if (x < map.length - 1) {
min = Math.min(min, map[x + 1][y]);
}
return min;
}
}
营救公主
package huawei;
public class Demo {
public int SSavep(char[][] visited, int t, int n, int m) {
int[][] map = new int[visited.length][visited[0].length];
int startx=0, starty=0, endx=0, endy=0;
for (int i = 0; i < visited.length; i++) {
for (int j = 0; j < visited[0].length; j++) {
map[i][j] = Integer.MAX_VALUE;
if ('P' == visited[i][j]) {
endx = i;
endy = j;
} else if ('S' == visited[i][j]) {
map[i][j] = 0;
startx = i;
starty = j;
}
}
}
// 从开始位置计算所有表格的值
mark(visited, map, startx, starty - 1); // 左
mark(visited, map, startx - 1, starty); // 上
mark(visited, map, startx, starty + 1); // 右
mark(visited, map, startx + 1, starty); // 下
// 获取公主位置的值
int minStep = map[endx][endy];
return minStep <= t ? 0 : -1;
}
// 根据周边的值计算自己最小的值,如果自己的值改变,则重新计算周边的值
private void mark(char[][] visited, int[][] map, int x, int y) {
if (x < 0 || x >= map.length || y < 0 || y >= map[0].length) {
return;
}
if(visited[x][y] == '*') {
return;
}
int newValue = getArroundMin(map, x, y) + 1;
if (newValue < map[x][y]) {
map[x][y] = newValue;
mark(visited, map, x, y - 1); // 左
mark(visited, map, x - 1, y); // 上
mark(visited, map, x, y + 1); // 右
mark(visited, map, x + 1, y); // 下
}
}
// 计算周围最小的值
private int getArroundMin(int[][] map, int x, int y) {
int min = Integer.MAX_VALUE;
// 左
if (y > 0) {
min = Math.min(min, map[x][y - 1]);
}
// 上
if (x > 0) {
min = Math.min(min, map[x - 1][y]);
}
// 右
if (y < map[0].length - 1) {
min = Math.min(min, map[x][y + 1]);
}
// 下
if (x < map.length - 1) {
min = Math.min(min, map[x + 1][y]);
}
return min;
}
}
开心的小明
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class nyoj49 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int c = Integer.parseInt(br.readLine());
while (c-- > 0) {
String order[] = br.readLine().split(" ");
int n = Integer.parseInt(order[0]);
int m = Integer.parseInt(order[1]);
int[][] data = new int[m][2];
for (int i = 0; i < m; i++) {
String in[] = br.readLine().split(" ");
data[i][0] = Integer.parseInt(in[0]);
data[i][1] = Integer.parseInt(in[1]);
}
int[] dp = new int[n + 1];
for (int i = 0; i < m; i++) {// 枚举每一件物品
for (int j = n; j >= data[i][0]; j--) {
/*
* dp[j - data[i][0]]:指的是j - data[i][0]元的物品与其重要度的乘积
* data[i][0] * data[i][1]:data[i][0]元的物品与其重要度的乘积
*/
if (dp[j - data[i][0]] + data[i][0] * data[i][1] > dp[j]) {
dp[j] = dp[j - data[i][0]] + data[i][0] * data[i][1];
}
}
}
System.out.println(dp[n]);
}
}
}
参考
https://blog.csdn.net/qq_35781950/article/details/78439607
https://blog.csdn.net/angeltxy0213/article/details/83780535