目录
[NOIP2002普及组]过河卒
题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] b = new int[2];
for (int i = 0; i < 2; i++) {
b[i] = in.nextInt();
}
int[] horse = new int[2];
for (int i = 0; i < 2; i++) {
horse[i] = in.nextInt();
}
long[][] dp = new long[b[0] + 2][b[1] + 2];
dp[0][1] = 1;
for (int i = 1; i <= b[0] + 1; i++) {
for (int j = 1; j <= b[1] + 1; j++) {
if ((Math.abs(horse[0] + 1 - i) + Math.abs(horse[1] + 1 - j) == 3 &&
i != horse[0] + 1 && j != horse[1] + 1) || (i == horse[0] + 1 &&
j == horse[1] + 1)) {
dp[i][j] = 0;
} else {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
}
System.out.println(dp[b[0] + 1][b[1] + 1]);
}
}
牛客.游游的水果大礼包
只能用枚举,贪心策略我们知道的过于少,导致不好去贪心处理
选择:依次枚举1号礼包的个数x,计算出2号礼包的个数y,然后去计算总的价值。
x和y的个数范围,应该数字中取最小值获取。
牛客.买卖股票的最好时机(二)
Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 int n=in.nextInt(); int[]a=new int[n]; for(int i=0;i<n;i++){ a[i]=in.nextInt(); } //本次处于是买入状态(可以买或者不买) int []f=new int[n]; //本次处于是卖出 int []g=new int[n]; f[0]=-a[0]; for(int i=1;i<n;i++){ //要么昨天我也处于买入状态,要么就是现在已经买入完成了 f[i]=Math.max(g[i-1]-a[i],f[i-1]); g[i]=Math.max(f[i-1]+a[i],g[i-1]); } int max=0; for(int i=0;i<n;i++){ max=Math.max(g[i],max); } System.out.println(max);
二叉树非递归前序遍历
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ret=new LinkedList<>();
if(root==null) return ret ;
Stack<TreeNode> stack=new Stack<>();
TreeNode cur=root;
while(!stack.isEmpty()||cur!=null){
while(cur!=null){
stack.push(cur);
ret.add(cur.val);
cur=cur.left;
}
TreeNode top=stack.pop();
cur=top.right;
}
return ret;
}
}