TC SRM 547 div2

本文探讨了两个算法问题:一是通过几何方法求解正六边形内部分割形成的最小三角形面积;二是使用动态规划解决求最大绳索长度的问题,涉及状态转移方程的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

250pt: 题意是给定一个正六边形,在正六边形内划三条不相交的线将其分成四个三角形,求最小的三角形的面积。果断地在推公式的时候把变量当做常量带入,所以致使公式推错。纠结了好久的。划分出来的四个三角形面积都是固定的,推公式计算最小就好了。 s = (sqrt(3)*L*L)/4;

500pt:自己没想出来,dp的一道题目;有n个柱子在一条直线方向排列,每个柱子i的高度的取值范围是[1,height[i]],若用一条绳子将每个柱子的最顶端连接起来(共形成n-1段),求所用绳子的最大长度。

dp[i][0]表示当前柱子i取最短1,dp[i][1]表示当前柱子i取最长height[i];

状态转移方程:

dp[i][0] = max(dp[i - 1][0] + w,dp[i - 1][1] + hypot(height[i - 1] - 1.0,w));
dp[i][1] = max(dp[i - 1][0] + hypot(height[i] - 1,w),dp[i - 1][1] + hypot(height[i] - height[i - 1],w));

#include <cstdio>
#include <cmath>
#include <iostream>
#include <vector>
#include <cstring>
#define maxn 107
using namespace std;

class PillarsDivTwo
{
    public:
    double maximalLength(vector <int> height, int w)
    {
        double dp[maxn][2];
        memset(dp,0,sizeof(dp));
        int sz = height.size();
        for (int i = 1; i < sz; ++i)
        {
            dp[i][0] = max(dp[i - 1][0] + w,dp[i - 1][1] + hypot(height[i - 1] - 1.0,w));
            dp[i][1] = max(dp[i - 1][0] + hypot(height[i] - 1,w),dp[i - 1][1] + hypot(height[i] - height[i - 1],w));
        }
        return max(dp[sz - 1][0],dp[sz - 1][1]);
    }
};

  

转载于:https://www.cnblogs.com/E-star/archive/2012/06/27/2566212.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值