LINK:小H的小屋

尽管有论文 但是 其证明非常的不严谨 结尾甚至还是大胆猜测等字样...

先说贪心:容易发现m|n的时候此时均分两个地方就是最优的。

关于这个证明显然m在均分的时候的分点一定是n的子集 考虑不为均分的时候答案一块增多一个增少 但是增多的幅度显然更大 所以的证。

然后 当m不整除n的时候 容易想到还是均分的思路 不过 这次 对于一部分均分到的是 n/m 一部分是n/m+1.

然后暴力枚举中间的分点即可 然后进行计算。

这样复杂度O(100) 异常优秀。

考虑不那么优秀的dp.

容易想到 每放一块北墙对应多块南墙 设状态 f[i][j][k]表示前i块北墙j块南墙此时端点在j的最小值。

这状态转移是n^5的 不过大力跑也能A.值得注意的是 在状态转移的时候需要预处理一下数组g[i][j]表示i个南墙分j个距离的最小值。

因为题目中明确说了 分的位置必须为整数。当然直接计算也是可以依靠分成两段计算也行。可以发现那样也是最优的。

考虑优化 考虑优化j的状态转移 当k递增时 j的转移必然递增。

考虑到 如果j减小了那么造成对于更小的面积用更多的墙 这显然不是最优的。

所以此时总复杂度n^4.

值得注意的是 还可以优化 对于 i,j,k固定的时候 j,k的决策一定不会比 i+1,j,k的决策更大 所以再开个数组存上次的决策来优化转移。

这个证明不太会。

n^4的做法 显然可过嘛.

const int MAXN=310000,G=3;
int m,n;
db ans,k1,k2,s1;
db f[102][102][102];//f[i][j][k]表示 前i个北墙 前j个南墙 现在到达点k的最小面积
db g[102][102];
//int g[101][101][101][2];//g[i][j][k]表示 这个状态的最优决策
int main()
{
freopen("1.in","r",stdin);
gi(k1);//北
gi(k2);//南
gt(m);//北
gt(n);//南
//m<=n;
if(n%m==0)
{
db w2=100.0/(n*1.0);
db w1=100.0/(m*1.0);
ans=w2*k2*n*w2+w1*w1*k1*m;
printf("%.1lf\n",ans);
return 0;
}
rep(0,m,i)rep(0,n,j)rep(0,100,k)f[i][j][k]=INF;
rep(0,n,i)rep(0,100,k)g[i][k]=INF;
g[0][0]=0;
rep(1,n,i)rep(i,100,j)
rep(1,j,k)g[i][j]=min(g[i][j],g[i-1][j-k]+k*k*k2);
f[0][0][0]=0;
rep(1,m,i)//北墙
rep(i,n,j)//南墙
{
rep(j,100,k)
{
//枚举北墙的决策得到南墙的决策.
//cout<<f[i][j][k]<<endl;
int w2=1;//w2逐渐增大
rep(1,k,w1)//w1决策增大的时候 w2决策不会减小
{
while(g[w2+1][w1]+f[i-1][j-w2-1][k-w1]<f[i-1][j-w2][k-w1]+g[w2][w1]&&w2+1<=j)++w2;
//rep(1,j,w2)
f[i][j][k]=min(f[i][j][k],f[i-1][j-w2][k-w1]+g[w2][w1]+(db)w1*k1*w1);
//if(i<=1&&j<=1&&k<=10)cout<<f[i-1][j-w2][k-w1]<<' '<<f[ i][j][k]<<' '<<i<<' '<<j<<' '<<k<<' '<<w2<<' '<<j-w2<<' '<<k-w1<<endl;
}
}
}
printf("%.1lf",f[m][n][100]);
return 0;
}

P4274 [NOI2004]小H的小屋 dp 贪心的更多相关文章

  1. BZOJ1505: [NOI2004]小H的小屋

    BZOJ1505: [NOI2004]小H的小屋 Description 小H发誓要做21世纪最伟大的数学家.他认为,做数学家与做歌星一样,第一步要作好包装,不然本事再大也推不出去. 为此他决定先在自 ...

  2. [NOI2004]小H的小屋 贪心

    神仙贪心,洛谷没有插图导致我题一开始都没看懂.容易发现,块越多越优秀,然后为了满足题意,所以假如不能整除,就分为两个部分(能整除就直接均分就行了).前一部分是n/m,后一部分是n/m+1.数量也是固定 ...

  3. NOI2004 小H的小屋

    还是纯粹不会啊……到底该怎么办 http://blog.sina.com.cn/s/blog_86942b1401016m3g.html http://www.cnblogs.com/datam-cy ...

  4. 【Wannafly挑战赛10 - B】小H和密码(DP)

    试题链接:https://www.nowcoder.com/acm/contest/72/B 题目描述     小H在击败怪兽后,被一个密码锁挡住了去路     密码锁由N个转盘组成,编号为1~N,每 ...

  5. [BZOJ4813][CQOI2017]小Q的棋盘(DP,贪心)

    4813: [Cqoi2017]小Q的棋盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 804  Solved: 441[Submit][Statu ...

  6. 小H和密码

    链接:https://www.nowcoder.com/acm/contest/72/B来源:牛客网 题目描述     小H在击败怪兽后,被一个密码锁挡住了去路     密码锁由N个转盘组成,编号为1 ...

  7. 【bzoj4027】[HEOI2015]兔子与樱花 树形dp+贪心

    题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...

  8. 【BZOJ4813】[CQOI2017]小Q的棋盘(贪心)

    [BZOJ4813][CQOI2017]小Q的棋盘(贪心) 题面 BZOJ 洛谷 题解 果然是老年选手了,这种题都不会做了.... 先想想一个点如果被访问过只有两种情况,第一种是进入了这个点所在的子树 ...

  9. hdu2067 小兔的棋盘 DP/数学/卡特兰数

    棋盘的一角走到另一角并且不越过对角线,卡特兰数,数据量小,可以当做dp求路径数 #include<stdio.h> ][]; int main() { ; ) { int i,j; lon ...

随机推荐

  1. css3-pointer-events_demo

    该demo定义了一个菜单,点击了一次之后就不能再点击,另外其中也用到了flex布局,可直接将代码复制运行即可 <html> <head> <meta name=" ...

  2. SCOI 2009 围豆豆(状压DP)

    SCOI 2009 围豆豆 题目描述 是不是平时在手机里玩吃豆豆游戏玩腻了呢?最近MOKIA手机上推出了一种新的围豆豆游戏,大家一起来试一试吧. 游戏的规则非常简单,在一个N×M的矩阵方格内分布着D颗 ...

  3. sql语句-CASE WHEN用法详解

    当我们需要从数据源上 直接判断数据显示代表的含义的时候 ,就可以在SQL语句中使用 Case When这个函数了. Case具有两种格式.简单Case函数和Case搜索函数. 第一种 格式 : 简单C ...

  4. mac篇---使用iTerm2快捷连接SSH

    大家都知道使用iTerm2连接shh 使用命令 ssh -p22 root@129.10.10.1,然后输入密码即可. 但是每次都输入还是比较麻烦的.iTerm2为我们提供了快捷的方式.三步即可完成此 ...

  5. Spring Boot读取配置文件的几种方式

    Spring Boot获取文件总的来说有三种方式,分别是@Value注解,@ConfigurationProperties注解和Environment接口.这三种注解可以配合着@PropertySou ...

  6. System.Timers.Timer(定时器)

    1.System.Timers命名空间下的Timer类.System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法 ...

  7. SpringBoot2.x入门:应用打包与启动

    前提 这篇文章是<SpringBoot2.x入门>专辑的第5篇文章,使用的SpringBoot版本为2.3.1.RELEASE,JDK版本为1.8. 这篇文章分析一个偏向于运维方面的内容: ...

  8. Edit Static Web File Http Header Metadata of AWS S3 from SDK | SDK编程方式编辑储存在AWS S3中Web类文件的Http Header元数据

    1.Motivation | 起因 A requirement from the product department requires download image from AWS S3 buck ...

  9. MySQL分库分表的原则

    一.分表 当一个表的数据达到几千万条的时候,每一次查询都会花费更长的时间,如果这时候在使用链表查询,那么我想应该会实在那里,那么我们应该如何解决这个问题呢? 1.为什么要分表: 分表的目的就是为了解决 ...

  10. 阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)

    分片上传(结合element-ui的upload组件实现自定义上传) async uploadFree(content){ let data = await this.getOssToken(); / ...