ACM训练日记—5月31日

      最近主要在看区间dp的题目和学习状压dp和一些零碎的数据结构(哈希,字典树,什么的),这次先整理一下区间dp的题目。

      Game of Sum 

题意:有n个数字排成一条直线,每个人每次可以从两端(左或右)中的任意一端取走一个或若干个数(获得价值为取走数之和), 但是他取走的方式一定要让他在游戏结束时价值尽量的高,请你算一下在游戏结束时,先取数的人价值与后取数人价值之差。

     dp[i][j]表示区间 i 到 j 取得最大值。dp[i][j]=min(dp[i][j],sum[i][j]-min(dp[i][k],dp[k+1][j]))。

int n,dp[105][105];
int sum[105];
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;
        sum[0]=0;
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            sum[i]=sum[i-1]+x;
            dp[i][i]=x;
        }
        for(int len=1;len<n;len++)
        {
            for(int l=1;l+len<=n;l++)
            {
                int r=l+len;
                int t=0;
                for(int k=1;k<=len;k++)
                {
                    t=min(t,min(dp[l+k][r],dp[l][r-k]));
                }
                dp[l][r]=sum[r]-sum[l-1]-t;
            }
        }
        cout<<2*dp[1][n]-sum[n]<<endl;
    }

}

poj 1191 棋盘分割

      将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行) 

来自:https://blog.youkuaiyun.com/chenzhenyu123456/article/details/49803485

       切横行x1 <= row < x2

dp[k][x1][y1][x2][y2]=min(dp[k-1][x1][y1][row][y2]+sum(row+1,y1,x2,y2),dp[k-1][row+1][y1][x2][y2]+sum(x1,y1,row,y2));

切纵行y1 <= cul < y2
dp[k][x1][y1][x2][y2] 

= min(dp[k-1][x1][y1][x2][cul]+sum(x1,cul+1,x2,y2), dp[k-1][x1][cul+1][x2][y2]+sum(x1,y1,x2,cul));

int s[9][9];  
int a[9][9];  
int ans[15][9][9][9][9];  
int getsum(int x1, int y1, int x2, int y2)  
{  
    int temp = s[x2][y2] - s[x2][y1-1] - s[x1-1][y2] + s[x1-1][y1-1];  
    return temp*temp;  
}  
int dp(int k, int x1, int y1, int x2, int y2)  
{  
    if(ans[k][x1][y1][x2][y2] != -1)  
        return ans[k][x1][y1][x2][y2];  
    if(k == 0)  
        return getsum(x1, y1, x2, y2);  
    ans[k][x1][y1][x2][y2] = INF;  
    for(int row = x1; row < x2; row++)  
        ans[k][x1][y1][x2][y2] = min(ans[k][x1][y1][x2][y2], min(dp(k-1, x1, y1, row, y2)+getsum(row+1, y1, x2, y2), dp(k-1, row+1, y1, x2, y2)+getsum(x1, y1, row, y2)));  
    for(int cul = y1; cul < y2; cul++)  
        ans[k][x1][y1][x2][y2] = min(ans[k][x1][y1][x2][y2], min(dp(k-1, x1, y1, x2, cul)+getsum(x1, cul+1, x2, y2), dp(k-1, x1, cul+1, x2, y2)+getsum(x1, y1, x2, cul)));  
    return ans[k][x1][y1][x2][y2];  
}  
int main()  
{  
    int n;  
    while(Ri(n) != EOF)  
    {  
        int sum = 0; CLR(s, 0);  
        for(int i = 1; i <= 8; i++)  
            for(int j = 1; j <= 8; j++)  
                Ri(a[i][j]), sum += a[i][j];  
        for(int i = 1; i <= 8; i++)  
        {  
            for(int j = 1; j <= 8; j++)  
            {  
                if(i == 1 && j == 1)  
                    s[i][j] = a[i][j];  
                else if(i == 1)  
                    s[i][j] = s[i][j-1] + a[i][j];  
                else if(j == 1)  
                    s[i][j] = s[i-1][j] + a[i][j];  
                else  
                    s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j];  
            }  
        }  
        CLR(ans, -1);  
        printf("%.3lf\n", sqrt((dp(n-1, 1, 1, 8, 8)*n - sum*sum)*1.0 / n / n));  
    }  
    return 0;  

}  

状压dp的知识点

1.’&’符号,x&y,会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值。例如3(11)&2(10)=2(10)。


2.’|’符号,x|y,会将两个十进制数在二进制下进行或运算,然后返回其十进制下的值。例如3(11)|2(10)=3(11)。


3.’^’符号,x^y,会将两个十进制数在二进制下进行异或运算,然后返回其十进制下的值。例如3(11)^2(10)=1(01)。


4.’<<’符号,左移操作,x<<2,将x在二进制下的每一位向左移动两位,最右边用0填充,x<<2相当于让x乘以4。相应的,’>>’是右移操作,x>>1相当于给x/2,去掉x二进制下的最有一位。


这四种运算在状压dp中有着广泛的应用,常见的应用如下:


1.判断一个数字x二进制下第i位是不是等于1。


方法:if ( ( ( 1 << ( i - 1 ) ) & x ) > 0)


将1左移i-1位,相当于制造了一个只有第i位上是1,其他位上都是0的二进制数。然后与x做与运算,如果结果>0,说明x第i位上是1,反之则是0。


2.将一个数字x二进制下第i位更改成1。


方法:x = x | ( 1<<(i-1) )


证明方法与1类似,此处不再重复证明。


3.把一个数字二进制下最靠右的第一个1去掉。


方法:x=x&(x-1)

数据不能太多(好像是<=16?),然后遍历所有状态的姿势就是用二进制来表示,01串,1表示使用,0表示未使用,就把所有的状态投射到很多二进制的数上(类似于hash?)然后对每个状态找上一"些"状态的

资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 无锡芯微半导体科技有限公司生产的A1SHB三极管(全称PW2301A)是一款P沟道增强型MOSFET,具备低内阻、高重复雪崩耐受能力以及高效电源切换设计等优势。其技术规格如下:最大漏源电压(VDS)为-20V,最大连续漏极电流(ID)为-3A,可在此条件下稳定工作;栅源电压(VGS)最大值为±12V,能承受正反向电压;脉冲漏极电流(IDM)可达-10A,适合处理短暂高电流脉冲;最大功率耗散(PD)为1W,可防止器件过热。A1SHB采用3引脚SOT23-3封装,小型化设计利于空间受限的应用场景。热特性方面,结到环境的热阻(RθJA)为125℃/W,即每增加1W功率损耗,结温上升125℃,提示设计电路时需考虑散热。 A1SHB的电气性能出色,开关特性优异。开关测试电路及波形图(图1、图2)展示了不同条件下的开关性能,包括开关上升时间(tr)、下降时间(tf)、开启时间(ton)和关闭时间(toff),这些参数对评估MOSFET在高频开关应用中的效率至关重要。图4呈现了漏极电流(ID)与漏源电压(VDS)的关系,图5描绘了输出特性曲线,反映不同栅源电压下漏极电流的变化。图6至图10进一步揭示性能特征:转移特性(图7)显示栅极电压(Vgs)对漏极电流的影响;漏源开态电阻(RDS(ON))随Vgs变化的曲线(图8、图9)展现不同控制电压下的阻抗;图10可能涉及电容特性,对开关操作的响应速度和稳定性有重要影响。 A1SHB三极管(PW2301A)是高性能P沟道MOSFET,适用于低内阻、高效率电源切换及其他多种应用。用户在设计电路时,需充分考虑其电气参数、封装尺寸及热管理,以确保器件的可靠性和长期稳定性。无锡芯微半导体科技有限公司提供的技术支持和代理商服务,可为用户在产品选型和应用过程中提供有
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 在 JavaScript 中实现点击展开与隐藏效果是一种非常实用的交互设计,它能够有效提升用户界面的动态性和用户体验。本文将详细阐述如何通过 JavaScript 实现这种功能,并提供一个完整的代码示例。为了实现这一功能,我们需要掌握基础的 HTML 和 CSS 知识,以便构建基本的页面结构和样式。 在这个示例中,我们有一个按钮和一个提示框(prompt)。默认情况下,提示框是隐藏的。当用户点击按钮时,提示框会显示出来;再次点击按钮时,提示框则会隐藏。以下是 HTML 部分的代码: 接下来是 CSS 部分。我们通过设置提示框的 display 属性为 none 来实现默认隐藏的效果: 最后,我们使用 JavaScript 来处理点击事件。我们利用事件监听机制,监听按钮的点击事件,并通过动态改变提示框的 display 属性来实现展开和隐藏的效果。以下是 JavaScript 部分的代码: 为了进一步增强用户体验,我们还添加了一个关闭按钮(closePrompt),用户可以通过点击该按钮来关闭提示框。以下是关闭按钮的 JavaScript 实现: 通过以上代码,我们就完成了点击展开隐藏效果的实现。这个简单的交互可以通过添加 CSS 动画效果(如渐显渐隐等)来进一步提升用户体验。此外,这个基本原理还可以扩展到其他类似的交互场景,例如折叠面板、下拉菜单等。 总结来说,JavaScript 实现点击展开隐藏效果主要涉及 HTML 元素的布局、CSS 的样式控制以及 JavaScript 的事件处理。通过监听点击事件并动态改变元素的样式,可以实现丰富的交互功能。在实际开发中,可以结合现代前端框架(如 React 或 Vue 等),将这些交互封装成组件,从而提高代码的复用性和维护性。
一、AutoCAD 2016的工作界面 组成要素:由应用程序菜单、标题栏、快速访问工具栏、菜单栏、功能区、命令窗口、绘图窗口和状态栏组成。 1. 切换至AutoCAD 2016 1)工作空间 模式类型:提供草图与注释、三维基础、三维建模三种工作空间模式 二维绘图功能:在草图与注释空间中可使用默认、插入、注释、参数化、视图管理等选项卡进行二维图形绘制 切换方法: 快速访问工具栏→工作空间按钮下拉列表 状态栏→切换工作空间按钮下拉列表 三维功能:三维基础空间包含可视化、坐标、长方体等三维建模工具 2)应用程序菜单 位置:位于界面左上角 核心功能: 搜索命令 文件操作(新建/打开/保存/另存为/输出/发布/打印/关闭) 最近文档管理(可按期/大小/类型排序) 选项设置(打开选项对话框) 3)标题栏 显示内容:当前程序名称(Autodesk AutoCAD 2016)和文件名称 信息中心功能: 帮助搜索 Autodesk账户登录 软件更新检查 窗口控制(最小化/最大化/关闭) 4)菜单栏 显示设置:通过自定义快速访问工具栏→显示菜单栏选项启用 菜单结构:包含文件、编辑、视图、插入等11个主菜单项 命令示例: 绘图→直线:进入直线绘制模式 绘图→圆弧:提供三点、起点-圆心-端点等11种绘制方式 5)选项卡和面板 组织结构: 选项卡(默认/插入/注释等) 面板(绘图/修改/注释等) 命令按钮(直线/多段线/圆等) 操作流程:单击命令按钮→绘图区操作→Enter键确认 6)工具栏 调用方式:工具→工具栏→AutoCAD→选择所需工具栏 控制方法: 显示:勾选对应工具栏选项 隐藏:取消勾选或点击工具栏关闭按钮 示例操作:绘图工具栏包含直线、构造线等绘图工具按钮 7)绘图窗口 主要功能:核心绘图工作区域 导航控制: 滚动条调整视图 模型/布局空间切换 显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值