2023-08-26:请用go语言编写。开心一下的智力题:

有一个村庄,一共250人,

每一个村民要么一定说谎,要么只说真话,

村里有A、B、C、D四个球队,且每个村民只会喜欢其中的一支球队,

但是说谎者会不告知真实喜好,而且会说是另外三支球队的支持者。

访问所有的村民之后,得到的访谈结果如下 :

A的支持者有90,

B的支持者有100,

C的支持者有80,

D的支持者有80。

问村里有多少个说谎者。

下面是正式题 :

你有一个凸的 n 边形,其每个顶点都有一个整数值。给定一个整数数组 values ,

其中 values[i] 是第 i 个顶点的值(即 顺时针顺序 )。

假设将多边形 剖分 为 n - 2 个三角形。

对于每个三角形,该三角形的值是顶点标记的乘积,

三角剖分的分数是进行三角剖分后所有 n - 2 个三角形的值之和。

返回 多边形进行三角剖分后可以得到的最低分 。

输入:values = [1,2,3]。

输出:6。

解释:多边形已经三角化,唯一三角形的分数为 6。

来自左程云

答案2023-08-26:

大体过程如下:

1.在main函数中,定义一个整数数组values表示每个顶点的值。

2.调用minScoreTriangulation函数,传入values数组,并将返回的最低分数打印出来。

3.在minScoreTriangulation函数中,首先获取顶点数量N,然后创建一个二维切片dp作为动态规划的缓存。

4.初始化dp切片为-1。

5.返回调用递归函数f,传入values、起始位置0、结束位置N-1以及dp切片。

6.在f函数中,首先处理递归终止条件,如果起始位置i大于等于结束位置j-1,返回0,表示无法构成三角形。

7.如果在缓存中存在dp[i][j]的结果,则直接返回结果。

8.初始化ans变量为math.MaxInt32,用于存储最小的分数。

9.对于所有的m从i+1到j-1,遍历所有可能的分割点。

10.对于每个分割点m,计算分割两部分的分数和,并取最小值。

11.更新ans为当前最小值。

12.将ans存入缓存dp[i][j]中。

13.返回ans作为结果。

总的时间复杂度为O(N^3),因为有三层嵌套循环,每层循环的次数最大为N。

总的空间复杂度为O(N^2),因为需要创建一个二维切片dp作为缓存,其大小为N*N。

go完整代码如下:

package main

import (
"fmt"
"math"
) func main() {
values := []int{1, 2, 3}
result := minScoreTriangulation(values)
fmt.Println(result)
} func minScoreTriangulation(values []int) int {
N := len(values)
dp := make([][]int, N)
for i := 0; i < N; i++ {
dp[i] = make([]int, N)
for j := 0; j < N; j++ {
dp[i][j] = -1
}
}
return f(values, 0, N-1, dp)
} func f(values []int, i int, j int, dp [][]int) int {
if i >= j-1 {
return 0
}
if dp[i][j] != -1 {
return dp[i][j]
}
ans := math.MaxInt32
for m := i + 1; m < j; m++ {
ans = int(math.Min(float64(ans), float64(f(values, i, m, dp)+f(values, m, j, dp)+values[i]*values[m]*values[j])))
}
dp[i][j] = ans
return ans
}

rust语言完整代码如下:

fn min_score_triangulation(values: Vec<i32>) -> i32 {
let mut dp = vec![vec![-1; values.len()]; values.len()];
return f(&values, 0, values.len() - 1, &mut dp);
} // values[i...j]范围上这些点,要分解成多个三角形
// 三角形一个端点是values[i],另一个端点是values[j]
// 那么第三个点在i+1....j-1之间选
// 比如选了m点 : i......m.......j
// 当前获得的分数为values[i] * values[m] * values[j]
// 接下来,i.....m去分解三角形、m.....j去分解三角形
fn f(values: &Vec<i32>, i: usize, j: usize, dp: &mut Vec<Vec<i32>>) -> i32 {
if i >= j - 1 {
// 不够三个点,不会有得分
return 0;
}
if dp[i][j] != -1 {
// 缓存的答案
// 如果命中直接返回
// 看体系学习班,动态规划的章节
return dp[i][j];
}
let mut ans = std::i32::MAX;
for m in i + 1..j {
ans = std::cmp::min(
ans,
f(values, i, m, dp) + f(values, m, j, dp) + values[i] * values[m] * values[j],
);
}
dp[i][j] = ans;
return ans;
} fn main() {
let values = vec![1, 2, 3];
let result = min_score_triangulation(values);
println!("Result: {}", result);
}

c++完整代码如下:

#include <iostream>
#include <vector>
#include <climits>
int f(std::vector<int>& values, int i, int j, std::vector<std::vector<int>>& dp);
int minScoreTriangulation(std::vector<int>& values) {
int n = values.size();
std::vector<std::vector<int>> dp(n, std::vector<int>(n, -1)); return f(values, 0, n - 1, dp);
} int f(std::vector<int>& values, int i, int j, std::vector<std::vector<int>>& dp) {
if (i >= j - 1) {
// 不够三个点,不会有得分
return 0;
}
if (dp[i][j] != -1) {
// 缓存的答案
// 如果命中直接返回
// 看体系学习班,动态规划的章节
return dp[i][j];
}
int ans = INT_MAX;
for (int m = i + 1; m < j; m++) {
ans = std::min(ans, f(values, i, m, dp) + f(values, m, j, dp) + values[i] * values[m] * values[j]);
}
dp[i][j] = ans;
return ans;
} int main() {
std::vector<int> values = { 1, 2, 3 };
int result = minScoreTriangulation(values);
std::cout << "Result: " << result << std::endl; return 0;
}

c完整代码如下:

#include <stdio.h>
#include <limits.h> int min(int a, int b) {
return (a < b) ? a : b;
} int f(int* values, int i, int j, int dp[][100]) {
if (i >= j - 1) {
return 0;
}
if (dp[i][j] != -1) {
return dp[i][j];
}
int ans = INT_MAX;
for (int m = i + 1; m < j; m++) {
ans = min(ans, f(values, i, m, dp) + f(values, m, j, dp) + values[i] * values[m] * values[j]);
}
dp[i][j] = ans;
return ans;
} int minScoreTriangulation(int* values, int valuesSize) {
int dp[100][100];
for (int i = 0; i < valuesSize; i++) {
for (int j = 0; j < valuesSize; j++) {
dp[i][j] = -1;
}
}
return f(values, 0, valuesSize - 1, dp);
} int main() {
int values[] = { 1, 2, 3 };
int valuesSize = sizeof(values) / sizeof(values[0]);
int result = minScoreTriangulation(values, valuesSize);
printf("Result: %d\n", result);
return 0;
}

2023-08-26:请用go语言编写。开心一下的智力题: 有一个村庄,一共250人, 每一个村民要么一定说谎,要么只说真话, 村里有A、B、C、D四个球队,且每个村民只会喜欢其中的一支球队, 但是说的更多相关文章

  1. GO语言range的用法 (2013-08-09 14:08:26)

    range是go语言系统定义的一个函数. 函数的含义是在一个数组中遍历每一个值,返回该值的下标值和此处的实际值. 假如说a[0]=10,则遍历到a[0]的时候返回值为0,10两个值. 下面是一个例子: ...

  2. Leaf - 一个由 Go 语言编写的开发效率和执行效率并重的开源游戏服务器框架

    转自:https://toutiao.io/posts/0l7l7n/preview Leaf 游戏服务器框架简介 Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏 ...

  3. PHP语言编写的磁力搜索工具下载BT种子 支持transmission、qBittorrent

    磁力搜索网站2020/01/12更新 https://www.cnblogs.com/cilisousuo/p/12099547.html PT种子.BT种子搜索功能 IYUU自动辅种工具,目前能对国 ...

  4. C/C++编程笔记:C语言入门知识点(三),请收藏C语言最全笔记!

    今天我们继续来学习C语言的入门知识点,第一课:C/C++编程笔记:C语言入门知识点(二),请收藏C语言最全笔记! 21. 输入 & 输出 当我们提到输入时,这意味着要向程序填充一些数据.输入可 ...

  5. 基于php基础语言编写的小程序之计算器

    基于php基础语言编写的小程序之计算器 需求:在输入框中输入数字进行加.减.乘.除运算(html+php) 思路: 1首先要创建输入数字和运算符的输入框,数字用input的text属性,运算符用sel ...

  6. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...

  7. C语言编写的bmp读写程序

    C语言编写的bmp读写程序 建议先把bmp的数据存储格式了解下 <span style="font-size:16px;">#include "Windows ...

  8. 使用C语言编写windows服务一般框架

    原文:使用C语言编写windows服务一般框架 编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册, ...

  9. Atiitt 使用java语言编写sql函数或存储过程

    Atiitt 使用java语言编写sql函数或存储过程 1.1. java编写sql函数或存储过程的机制1 1.2. Java编写sp的优点1 1.3. 支持java源码,class文件,blog f ...

  10. c语言编写51单片机中断程序,执行过程是怎样的?

    Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序:#include<reg52.h>  void main(void)  {   EA=1;      //开放总中断   E ...

随机推荐

  1. LSP 链路状态协议

    转载请注明出处: 链路状态协议(Link State Protocol)是一种在计算机网络中用于动态计算路由的协议.它的主要作用是收集网络拓扑信息,为每个节点构建一个准确的网络图,并基于这些信息计算出 ...

  2. P6066 [USACO05JAN] Watchcow S

    prologue 这个题这么水的一个板子题. analysis 这个题目我们正反建两条边,在跑欧拉回路的时候,看这个边是不是被走过,走过就不走,跳过这个边.如果没走,就走这条边并且标记这个边走过了. ...

  3. 2020/5/8—cf,我裂开来

    呜呜呜我爆零了呜呜呜ljll 嗯T1T2防爆零的没了呜呜呜在此纪念可怜的yjz大佬21发AC 太惨了(逃 先来说说我们都有些啥题目吧... T1 嗯,裂开了,当场裂开我一看!桶排!然后实现,嗯?嗯!嗯 ...

  4. windows平板的开发和选型

    今天谈一个老话题,windows系统的选型和开发.问题的起因是我们一个客户说,用安卓平板不安全,苹果系统不考虑,于是他们要用自认为安全的WIN7系统. 提到WINDOWS平台下的的平板系统,此事说来话 ...

  5. 【分段传输】c#使用IAsyncEnumerable实现流式分段传输

    引言 在使用SSE的时候,前端可以实现流式传输,但是有个问题就是这是一个独占的连接,相当于如果你不手动关闭连接,就会一直请求,一直连接调用接口,而且发送的数据格式也是按照定义好的协议来,而使用c#自带 ...

  6. mysql语句操作

    1.从login表中选出name字段包含admin的前10条结果所有信息的sql语句 select  * from login where name like %admin% limit 0 ,10; ...

  7. umich cv-5-2 神经网络训练2

    这节课中介绍了训练神经网络的第二部分,包括学习率曲线,超参数优化,模型集成,迁移学习 训练神经网络2 学习率曲线 超参数优化 模型集成 迁移学习 学习率曲线 在训练神经网络时,一个常见的思路就是刚开始 ...

  8. nginx、rabbitmq、redis、zookeeper、zkui安装脚本

    nginx安装脚本 #!/bin/bash yum install -y wget pcre-devel openssl openssl-devel gcc ###安装perl### cd /usr/ ...

  9. Util应用框架基础(一) - 依赖注入

    本节介绍Util应用框架依赖注入的使用和配置扩展. 文章分为多个小节,如果对设计原理不感兴趣,只需阅读基础用法部分即可. 概述 当你想调用某个服务的方法完成特定功能时,首先需要得到这个服务的实例. 最 ...

  10. 改变element dialog弹窗的关闭按钮样式

    .el-dialog__headerbtn { top: 8px !important; background: url('https://你路径资源的url图片') left no-repeat; ...