滴滴0907-第二题

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	inputStr, _ := reader.ReadString('\n')
	inputStr = strings.TrimSpace(inputStr)
	inputArr := strings.Split(inputStr, " ")
	n, _ := strconv.Atoi(inputArr[0])
	k, _ := strconv.Atoi(inputArr[1])
	weights := make([][]int, k)
	for i := range weights {
		weights[i] = make([]int, 0)
	}
	for i := 0; i < k; i++ {
		inputStr, _ = reader.ReadString('\n')
		inputStr = strings.TrimSpace(inputStr)
		inputArr = strings.Split(inputStr, " ")
		for _, v := range inputArr {
			num, _ := strconv.Atoi(v)
			weights[i] = append(weights[i], num)
		}
	}
	message, _ := reader.ReadString('\n')
	message = strings.TrimSpace(message)
	dp := make([][]int, n)
	for i := range dp {
		dp[i] = make([]int, n)
	}
	for i := 0; i < n-1; i++ {
		pre := int(message[i] - 'a')
		later := int(message[i+1] - 'a')
		dp[i][i+1] = weights[pre][later]
	}
	if n <= 2 {
		fmt.Print(dp[0][n-1])
		return
	}
	for j := 3; j < n; j++ {
		for i := j - 1; i >= 0; i = i - 2 {
			for p := i; p <= j; p = p + 2 {
				pre := int(message[p] - 'a')
				later := int(message[j] - 'a')
				d1, d2 := 0, 0
				if p > i {
					d1 = dp[i][p-1]
				}
				if p < j {
					d2 = dp[p+1][j-1]
				}
				dp[i][j] = max(dp[i][j], d1+weights[pre][later]+d2)
			}
		}
	}
	fmt.Print(dp[0][n-1])
}

全部评论

相关推荐

拖放(Drag&nbsp;and&nbsp;Drop)功能是指在网页或应用程序中,用户可以通过鼠标或触摸操作将某个元素拖动到另一个位置或容器中的交互行为。实现拖放功能的一般步骤如下:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=4fe429db552e4b3a966ed18c92a2298a拖动操作(Drag):&nbsp;用户按住鼠标左键或触摸屏幕上的某个元素,并移动鼠标或手指,从而开始拖动该元素。在拖动过程中,可以通过更改元素的位置或者外观来提供视觉反馈。释放操作(Drop):&nbsp;用户在拖动元素的过程中,将其释放到目标位置或容器中。释放操作触发相应的事件,开发者可以在事件处理程序中获取拖放的相关信息,并进行相应的处理。拖放功能在网页和应用程序中有很多应用场景,其中一些常见的包括:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=4fe429db552e4b3a966ed18c92a2298a文件上传:&nbsp;用户可以将文件拖放到指定的区域,实现方便快捷的文件上传功能。网站或应用程序可以通过拖放操作获取文件的信息,并进行后续处理和上传。列表排序:&nbsp;用户可以通过拖放操作重新排序列表中的项目。例如,在一个任务管理应用中,用户可以通过拖动任务项来调整其顺序或更换任务的所属分类。图像库管理:&nbsp;用户可以通过拖放操作将图像文件拖动到图像库中,并进行管理和分类。这个功能常见于相册应用或在线图形编辑器中。组件拖放:&nbsp;在拖放可视化编辑器中,用户可以从组件库中拖动组件到画布中,从而创建和编辑页面或用户界面。这个功能常见于网站构建工具或应用界面设计工具。交互游戏:&nbsp;在一些网页游戏或交互式应用中,拖放功能被用于创建交互性和动态性的游戏机制或应用功能。
点赞 评论 收藏
分享
HTML5的历史管理功能(History&nbsp;API)是一组JavaScript接口,可让开发者对浏览器的历史记录进行操作和管理,而无需刷新整个页面。它提供了一种在单页应用(SPA)中处理导航和URL变化的机制。HTML5的历史管理功能对于❗❗❗构建单页应用(SPA)非常有用,具有以下作用:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=4fe429db552e4b3a966ed18c92a2298a💥💘动态更新URL:&nbsp;使用History&nbsp;API,开发者可以在不刷新页面的情况下动态地更新浏览器的URL。这样,用户在浏览单页应用时,可以看到URL根据应用状态的变化进行相应的更新,使得应用在外观上更具标准的网页感。💥💘前进和后退导航:&nbsp;History&nbsp;API允许开发者通过JavaScript代码模拟用户点击浏览器的前进和后退按钮,以实现导航功能。通过pushState()方法可以将新的URL添加到浏览器的历史记录中,而replaceState()方法可以替换当前的URL,而不会引起页面的刷新。💥💘历史状态管理:&nbsp;使用History&nbsp;API,开发者可以将应用的不同状态保存在浏览器的历史记录中。这样,当用户在应用中进行导航时,开发者可以根据浏览器历史记录中的状态,重新加载相应的页面内容或执行相应的操作,实现前后端的交互和状态管理。💥💘无刷新加载内容:&nbsp;History&nbsp;API的一项重要功能是replaceState()和pushState()方法的使用。通过这些方法,开发者可以在不刷新整个页面的情况下,改变URL并加载相应的内容,从而实现在单页应用中实现视觉上的页面切换和内容更新,提升用户体验。❗❗❗综上所述,HTML5的历史管理功能(History&nbsp;API)为构建单页应用(SPA)提供了控制浏览器历史记录、URL管理和导航的能力。它使得开发者可以更精准地控制导航流程、管理应用状态,并通过无刷新加载内容提供更流畅的用户体验。
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务