2018/7/6-纪中某C组题【jzoj1192,jzoj1397,jzoj1736】

前言

全体爆零,十分开心


正题


T1:矩阵

大意

就是N个矩阵,然后进行矩阵乘法(nmn∗mmpm∗p的矩阵相乘就会变成npn∗p的矩阵并且运算次数是nmpn∗m∗p),然后求最小乘法运算次数。

考试时

一直以为会是图论,然后想来想去(什么网络流,SPFA啊),然后就是不会做。

解题思路

首先讲解一下矩阵乘法的性质:
假设有两个矩阵A和B
ABBAA∗B≠B∗A
由此因为题目说矩阵一点可以进行相乘,所以前一个矩阵的宽一定等于后一个矩阵的长,然后就可以进行区间dp:
f[i][j]f[i][j]表示将iji∼j合并为一个矩阵的最少运算次数
然后枚举中间分割线midmid表示imidi∼midmid+1jmid+1∼j分开合并,然后所有的取最小值。

代码

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a[501],b[501],f[501][501];
int main()
{
    memset(f,127/3,sizeof(f));
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%d%d",&a[i],&b[i]);
        f[i][i]=0;//初始化
    }
    for (int j=2;j<=n;j++)
    {
        for (int i=j-1;i>=1;i--)
        {
            for (int mid=i;mid<j;mid++)
              f[i][j]=min(f[i][j],f[i][mid]+f[mid+1][j]+a[i]*b[mid]*b[j]);
              //动态转移
        }
    }
    printf("%d",f[1][n]);//输出
}

T2:圆盘取数

大意

有一个圆盘,上面有n个数,指针开始时指向第一个数,之后可以取走离指针距离不超过k里面的数,取走数代价是数的值,然后指针移动一格需要消耗代价为当前剩下最大的数。求取走所有数的最小代价。

考试时

开始时题目理解错了,然后后来改正后打了个贪心,然后WA

解题思路

首先我们可以发现取数字无论何时取走都需要固定的代价,代价就是所有数的和,所以我们只需要求指针转动的代价就好了。

首先我们先在不移动指针的情况下取走数字
这里写图片描述
然后将剩余部分展开
这里写图片描述

然后这就是一条链了,然后我们可以顺路收掉所有的所以每次剩下的一点只会是一段区间。
因为现在指针离最左边和最右边刚好都是k,移动一格也只能多取一个数,所有我们就可以把k的问题去掉了。
之后我们就可以进行区间dp
f[i][j][0/1]f[i][j][0/1]表示只剩下iji∼j的区间时指针在左/右边距离k。
然后我们现在重新定义这条链为1n1∼nnn为这条链的长度,然后我们要一个一个的去掉,所以我们是枚举一个w(n11)表示目前的长度然后枚举i表示开头。
之后我们要求f[i][j][0/1]f[i][j][0/1]了,我们有三种方式转移到f[i][j]f[i][j],我们拿在左边来计算,一是原本指针就在那个方向的左边,那么这样移动一格就好了

f[i1][j][0]+max[i1][j]f[i−1][j][0]+max[i−1][j]

然后另一种是左一格的情况转一圈过来取
f[i1][j][1]+(nw)max[i1][j]f[i−1][j][1]+(n−w)∗max[i−1][j]

最后一种是右一格的情况转一圈过来取
f[i][j+1][1]+(nw+1)max[i][j+1]f[i][j+1][1]+(n−w+1)∗max[i][j+1]

动态转移方程
f[i][j][0]=minf[i1][j][0]+max[i1][j],f[i1][j][1]+(nk)max[i1][j],f[i][j+1][1]+(nk+1)max[i][j+1]f[i][j][0]=minf[i−1][j][0]+max[i−1][j],f[i−1][j][1]+(n−k)∗max[i−1][j],f[i][j+1][1]+(n−k+1)∗max[i][j+1]

然后求右边的反过来就好了


代码

#include<cstdio>
#include<algorithm>
#include<cstring>
#define mins(x,y,z) min(x,min(y,z))
using namespace std;
int n,k,t,answ,ans,a[2010],f[2010][2010][2],m[2010][2010];
int main()
{freopen("data10.in","r",stdin);scanf("%d%d",&n,&k);n=n-2*k-1;for (int i=-k;i<=n+k;i++){scanf("%d",&t);answ+=t;//计算取数代价if (i>=1&&i<=n) a[i]=t;//去掉开始可以取的}for (int i=1;i<=n;i++){int maxs=0;for (int j=i;j<=n;j++)m[i][j]=(maxs=max(maxs,a[j]));//预处理区间最大}ans=2147483647/3;for (k=n-1;k>=1;k--){f[0][k][0]=f[0][k][1]=700000000;f[n-k+1][n+1][0]=f[n-k+1][n+1][1]=700000000;//防止取到界外for (int i=1;i<=n-k+1;i++){int j=i+k-1;f[i][j][0]=mins(f[i-1][j][0]+m[i-1][j],f[i-1][j][1]+(n-k)*m[i-1][j],f[i][j+1][1]+(n-k+1)*m[i][j+1]);//动态转移f[i][j][1]=mins(f[i][j+1][1]+m[i][j+1],f[i][j+1][0]+(n-k)*m[i][j+1],f[i-1][j][0]+(n-k+1)*m[i-1][j]);//动态转移}}for (int i=1;i<=n;i++)ans=min(ans,min(f[i][i][0],f[i][i][1])+a[i]+answ);//求最小代价printf("%d",ans);
}

T3:扑克游戏

大意

一颗无穷大的完全二叉树
这里写图片描述
你有n张数值不同的牌,如果你将一张牌放到了一个节点那么代价就是num(dep1)num−(dep−1)并且封锁子树,然后要求所有的牌放在树上的最小代价。

考试时

敲了一个贪心每次尽量平均分成两半子树传,然后只剩一个数时返回信息,最后进行统计

贪心代码

#include<cstdio>
#include<algorithm>
using namespace std;
int tot,n,a[10001],s,v[10001];
int tx(int x,int num,int sum,int dep)
{if (x<=1&&dep!=0) return sum*dep;int s=0,k=0;++tot;for (int i=1;i<=n;i++)if (v[i]==num){if (s*(dep+1)+a[i]*(dep+1)<=sum*(dep+1)/2) s+=a[i],v[i]=tot,k++;else v[i]=tot+1;}tot++;int w=tot;return tx(k,w-1,s,dep+1)+tx(x-k,w,sum-s,dep+1);
}
int main()
{   scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&a[i]),s+=a[i];sort(a+1,a+1+n);printf("%d",tx(n,0,s,0));       
}

然后全WA

解题思路

就是合并果子(复制粘贴)
原理:
合并果子时最后一堆需要消耗sum+=a[i](i=1n)sum+=a[i](i=1∼n),然后假设上一堆的需要果子子集S,那么代价就是sum+=x(xS)sum+=x(x⊆S)。那么我们发现该数合并的次数其实就是这道题放在的深度加1。

正确原理是哈夫曼树(自己看我也不会)。

代码

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int k,x,num,n1,n2,a1[30001],a2[30001],t[20001],w,sum;
int main()
{scanf("%d",&num);memset(a1,127/3,sizeof(a1));memset(a2,127/3,sizeof(a2));for (int i=1;i<=num;i++){scanf("%d",&x);t[x]++;//桶}for (int i=1;i<=20000;i++){while (t[i])//通排序{t[i]--;a1[++n1]=i;}}int i=1,j=1;k=1;while (k<num){if (a1[i]<a2[j])//取最小值{w=a1[i];i++;}else{w=a2[j];j++;}if (a1[i]<a2[j])//取第二次{w+=a1[i];i++;}else{w+=a2[j];j++;}a2[++n2]=w;//加入第二个队列k++;//计算合并次数sum+=w;//计算价值}printf("%d",sum);
}

合并果子O(n)O(n)原理详见:
https://blog.csdn.net/mr_wuyongcong/article/details/80030964


后续

矩阵乘法白学了,合并果子白学了,区间dp白学了。这就是第一天的收获233。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core - Razor页面之Handlers处理方法

简介 在前一篇文章中&#xff0c;我们讨论了Razor页面。今天我们来谈谈处理方法&#xff08;Handlers&#xff09;。我们知道可以将代码和模型放在 .cshtml 文件里面或与 .cshtml 匹配的 .cshtml.cs 文件中。Razor页面处理程序或处理方法将用户请求匹配到我们的方法&#xff1…

JFreeChart(八)之时序图

转载自 JFreeChart时序图 时序图表显示的数据点在相等的时间间隔序列变化。本章演示了如何从一个给定的业务数据使用JFreeChart&#xff0c;建立时序图。 业务数据 让我们考虑通过使用标准 Java API 的 Math.random()产生的各种随机数。我们使用这些数字产生一个时间序列图…

立德树人

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。最近&#xff0c;我的个人站上线啦&#xff0c;大家可以直接在浏览器的地址栏中输入&#xff1a;穆雄雄.com&#xff0c;轻轻敲击回车&#xff0c;即可直接进入……

.NET Standard 2.0 特性介绍和使用指南

前言 早上起来.NET社区沸腾了&#xff0c;期待已久的.NET Core 2.0终于发布&#xff01;根据个人经验&#xff0c;微软的产品一般在2.0时会趋于成熟&#xff0c;所以一个新的.Net开发时代已经来临&#xff01;未来属于.NET Core。 对于.NET Core 2.0的发布介绍&#xff0c;围绕…

2018/7/7-纪中某C组题【jzoj1494,jzoj1495,jzoj1496,jzoj1497】

前言 290卡成145&#xff0c;十分开心。 正题 T1&#xff1a;密码 大意 N个数乘起来 考试时 看起来十分简单的高精乘单精 解题思路 10241024其实是10241024高精乘高精了解一下&#xff0c;30分QAQ 代码(高精乘高精我就不解释了吧) #include<cstdio> #include<…

加油四班!加油佟穆!我们的征途是星辰大海!!!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】首先&#xff0c;感谢佟老师与范老师&#xff0c;在我不在的时候&#xff0c;三班的就业和四班的学习都落在了两位老师的肩头&#xff0c;其次&#xff0c;还需要特别感谢冯老师&#xff0c;能抽时间…

JFreeChart(一)之架构

转载自 JFreeChart架构 本章介绍给大家介绍 JFreeChart 不同类中如何交互的概念, JFreeChart基本类层次和应用水平的架构在基于Java应用程序如何工作的。 类层次架构 类层次架构解释了如何把不同阶层的相互库交互&#xff0c;以创建不同类型的图表。 以下是在上述框图中使用…

体验 PHP under .NET Core

昨天在 The week in .NET 中发现 Scott Hanselman 的这篇博文 Peachpie - Open Source PHP Compiler to .NET and WordPress under ASP.NET Core&#xff0c;知道了 Peachpie PHP 编译器加入了 .NET 基金会&#xff0c;借助 Peachpie &#xff0c;.NET Core 已经支持 PHP 。 今…

上学的你,是不是最怕老师给家长打电话……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号&#xff1a;雄雄的小课堂。今天&#xff0c;做了个重要的工作&#xff0c;趁着五一这个假期&#xff0c;准备和每个家长都通一次话&#xff0c;将学生在学习情况给家长说明一下&#xff0c;站在我的角度&#xff0c;也从…

2018/7/8-纪中某C组题【jzoj1619,jzoj1620,jzoj1621,jzoj1622】

前言 分数250250&#xff0c;十分开心 正题 T1&#xff1a;音乐节拍 洛谷题目链接&#xff1a;https://www.luogu.org/problemnew/show/P2969 大意 有n段音乐&#xff0c;每段音乐持续时间不同&#xff0c;q个询问求一个时间点再放那首歌 考试时 开始时发现询问的时间点不…

IDEA一定要改的8条配置

转载自 IDEA一定要改的8条配置 引言 坦白说&#xff0c;我很少写这种操作类型的文章。因为这种文章没啥新意&#xff0c;大家操作步骤肯定是一样的。然而&#xff0c;我答应了我的同事小阳&#xff0c;给她出一篇&#xff01;毕竟人家打算从Eclipse转IDEA了&#xff0c;于是…

.NET Core 2.0使用NLog

最近研究了一下NLog的使用方式&#xff0c;简单的入了一下门。 实现的功能&#xff0c;对于不同的日志&#xff0c;进行不同的记录&#xff0c;分别有系统运行日志&#xff0c;和个人在程序中写的异常日志。发布之后放在了IIS上。进行查看日志的信息 参考了两篇博客。 1.ht…

计划得一步一步实施,题库首先是第一步!

大家好&#xff0c;我是雄雄&#xff0c;好久没见了哈&#xff0c;欢迎关注公众号&#xff1a;雄雄的小课堂。今天上午没有讲课&#xff0c;听写以及把假期作业整理了下&#xff0c;部分学生的假期作业偷工减料&#xff0c;也都让让让他们挨个补上了。上午将对班级后期的整个计…

OMG!又一个频繁FullGC的案例

转载自 OMG&#xff01;又一个频繁FullGC的案例 将用户已安装APP数据从MySQL中迁移到MongoDB中。MySQL中存储方式比较简单&#xff0c;每个用户每个已安装的APP一行记录&#xff0c;且数据模型对应AppFromMySQL。迁移到MongoDB中&#xff0c;我们想更好的利用MongoDB的优势&a…

ASP.NET Core - 关于标签帮助器值得了解的五点

如果您开发过ASP.NET Core Web应用程序&#xff0c;您应该已经熟悉了标签帮助器。ASP.NET Core应用程序依赖标签帮助器来呈现表单和表单字段是很常见的。所以&#xff0c;一个视图通常包含许多标签帮助器以及标准的HTML标记。您可以通过多种方式使用标签帮助器来提高开发的效率…

存储过程示例整理

--列出服务器上所有的数据库 exec sp_databases--改数据库的名字 exec sp_renamedb QQDB, QQ--查看表users中的列 exec sp_columns users《此组件已作为此服务器安全配置的一部分而被关闭》的解决办法use master exec sp_configure show advanced options,1 --显示高级配置信息…

如何使用MAT进行JVM内存泄露分析

转载自 如何使用MAT进行JVM内存泄露分析 在《Java Agent的隔离实现以及卸载时一些坑》中&#xff0c;卸载Agent之后&#xff0c;使用 jmap-histo:live pid命令验证执行FGC&#xff0c;相关Class是否会被回收&#xff0c;结果遇到了一些问题&#xff0c;最终通过MAT内存分析才…

Ribbon 客户端负载均衡

文章目录零、懒汉式改为饿汉式一、基于配置文件二、基于Bean配置三、自定义规则1 权重优先调用2 集群优先调用3 元数据优先调用零、懒汉式改为饿汉式 【consumer-springboot-80子模块】 Ribbon默认使用懒汉式加载服务列表&#xff0c;更改为懒汉式 application.yml ribbon: …

C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码

.NET core2.0 发布了,刺激,大致看了一下,很不错,打算后期学习.(不出意外,应该也会写个小系列). 虽然官方推荐用共享类库创建新的类库..然而我这个Demo还是使用的可移植.. 嗯..解释一下 为什么暂时没用共享类库.. 有些小BUG 可能是为了迎合其他类型的项目..所以在共享类库里创…

“老师,我不要苹果味的,我要葡萄味的”!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。题库四班目前题库正在维护中&#xff0c;工作量最大的莫过于题库里面的题量了&#xff0c;所以目前的解决方法是让动员大家一起出题&#xff0c;但是人多较杂&#xff0c;各种各样的题都有&#xff08;…