牛吃草 [PSA]  EOlymp - 15 JAVA DP

E - 牛吃草 [PSA]

 EOlymp - 15 

问题描述

Alice在山上放牛,发现前方有一块矩形的优质草场。草场共有M×N个小格,每个格子有一棵牧草,用一个整数描述一棵牧草的品质。牛从左下角进入草场开始,吃完一个格子中的牧草之后,只能向右或向前继续吃,并且最后吃到草场的右上角。Alice希望牛能吃到的牧草的品质之和尽量大。请你帮Alice规划一下牛吃草的路线。

数据输入

第一行是由空格分开的两个整数M,N,表示草场的大小。 接下来有M行,每行中有N个数字,分别表示各格子中的牧草品质。

  • 0 < N,M ≤ 100
  • 牧草的品质是[0,30000]的整数

数据输出

用R表示向右走,用F表示向前走。在一行中输出从左下角出发,到右上角的一条路径,使得牛吃到的牧草品质之和最大。

样例

输入样例

2 3
3 2 4
1 5 1

输出样例

RFR

 

本来以为这是一个简单的搜索题,从左下的点开始,不断向上或向右递归搜索到最终的右上角,找到其中的最大路径即可。

但实际上,这样的BFS只能过4/14的测试点,超时严

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PSA(PageRank with Semantic Annotation)算法是基于PageRank算法的扩展算法,主要应用于社交网络和语义网络中的节点排序。以下是用Java实现PSA算法的基本步骤: 1. 构建图结构:使用邻接矩阵或邻接表等数据结构,将节点和边的关系表示出来。 2. 计算节点之间的相似度:可以使用基于余弦相似度或欧几里得距离等方法,计算节点之间的相似度。 3. 构建节点之间的关系矩阵:将节点之间的相似度矩阵进行归一化处理,得到节点之间的关系矩阵。 4. 计算节点的PageRank值:使用PageRank算法计算每个节点的PageRank值。 5. 加入语义信息:将节点的语义信息加入到PageRank计算中,得到节点的PSA值。 以下是一个简单的Java代码示例,用于实现PSA算法: ```java public class PSA { //构建图结构 public static Map<String, List<String>> buildGraph(List<Node> nodes) { Map<String, List<String>> graph = new HashMap<>(); for (Node node : nodes) { graph.put(node.getId(), node.getNeighbors()); } return graph; } //计算节点之间的相似度 public static double[][] computeSimilarity(List<Node> nodes) { double[][] similarityMatrix = new double[nodes.size()][nodes.size()]; for (int i = 0; i < nodes.size(); i++) { Node node1 = nodes.get(i); for (int j = 0; j < nodes.size(); j++) { Node node2 = nodes.get(j); double similarity = computeCosineSimilarity(node1, node2); similarityMatrix[i][j] = similarity; } } return similarityMatrix; } //计算余弦相似度 public static double computeCosineSimilarity(Node node1, Node node2) { //... } //构建节点之间的关系矩阵 public static double[][] buildRelationMatrix(double[][] similarityMatrix) { double[][] relationMatrix = new double[similarityMatrix.length][similarityMatrix[0].length]; for (int i = 0; i < similarityMatrix.length; i++) { double sum = 0; for (int j = 0; j < similarityMatrix[0].length; j++) { sum += similarityMatrix[i][j]; } for (int j = 0; j < similarityMatrix[0].length; j++) { relationMatrix[i][j] = similarityMatrix[i][j] / sum; } } return relationMatrix; } //计算节点的PageRank值 public static double[] computePageRank(Map<String, List<String>> graph) { //... } //加入语义信息,计算PSA值 public static double[] computePSA(double[] pageRank, double[][] similarityMatrix, double lambda) { double[] psa = new double[pageRank.length]; for (int i = 0; i < pageRank.length; i++) { double sum = 0; for (int j = 0; j < similarityMatrix[0].length; j++) { double similarity = similarityMatrix[i][j]; double pr = pageRank[j]; sum += similarity * pr; } psa[i] = lambda * pageRank[i] + (1 - lambda) * sum; } return psa; } //主函数 public static void main(String[] args) { List<Node> nodes = new ArrayList<>(); //初始化节点和边的关系 Map<String, List<String>> graph = buildGraph(nodes); //计算节点之间的相似度 double[][] similarityMatrix = computeSimilarity(nodes); //构建节点之间的关系矩阵 double[][] relationMatrix = buildRelationMatrix(similarityMatrix); //计算节点的PageRank值 double[] pageRank = computePageRank(graph); //加入语义信息,计算PSA值 double lambda = 0.5; double[] psa = computePSA(pageRank, similarityMatrix, lambda); //输出PSA值 for (int i = 0; i < nodes.size(); i++) { System.out.println(nodes.get(i).getId() + ": " + psa[i]); } } } ``` 需要注意的是,以上代码只是一个简单的示例,实际应用中需要根据具体问题进行修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值