首先我们知道ans=Σ(h[i]*f[i])=Σ(h[i]*d[i])/s=Σ(k(r[i]+1)+c)*d[i]/s=Σ(k*r[i]+(k+c))*d[i]/s

  我们可以发现,除了k*r[i]之外,剩下的都是常数,那么我们这道题就转化成了求k*r[i]的最小值,那么区间dp就可以了,对于区间i,j,每次选取一个k为根,由左右两个区间转移过来,相当于将左右子树所有的深度+1,那么增加的代价就为两区间和,这样转移就可以了。

  对于第二问我们可以在转移的时候记录每个区间的最优决策点,也即选取的根,那么最后递归生成遍历就行了,但是bz上没有第二问,不用输出。

  反思:带错数据,将自己造的一组数据当成样例,查了半天错。

/**************************************************************
Problem: 1261
User: BLADEVIL
Language: C++
Result: Accepted
Time:0 ms
Memory:824 kb
****************************************************************/ //By BLADEVIL
#include <cstdio>
#define maxn 40
#define inf 1<<30 using namespace std; int n;
double ans,k,c;
double p[maxn],w[maxn][maxn];
int root[maxn][maxn]; void getmin(double &x,double y)
{x=(y<x)?y:x;} int main()
{
scanf("%d%lf%lf",&n,&k,&c);
double s=;
for (int i=;i<=n;i++) scanf("%lf",&p[i]),s+=p[i];
for (int i=;i<=n;i++) p[i]/=s;
//for (int i=1;i<=n;i++) printf("%0.3f ",p[i]); printf("\n");
for (int i=;i<=n;i++) ans+=p[i]*(k+c);
//printf("%0.3f\n",ans);
for (int i=;i<=n;i++) p[i]+=p[i-];
for (int i=;i<=n;i++)
for (int j=i+;j<=n;j++) w[i][j]=inf;
for (int l=;l<=n;l++)
for (int i=;i<=n-l+;i++)
{
int j=i+l-;
//printf("%d %d %0.3f\n",i,j,w[i][j]);
for (int k=i;k<=j;k++)
{
getmin(w[i][j],w[i][k-]+p[k-]-p[i-]+w[k+][j]+p[j]-p[k]);
//printf("%d %0.3f \n",k,w[i][j]);
}
//printf("%0.3f\n",w[i][j]);
}
ans+=w[][n]*k;
printf("%0.3f\n",ans);
/*
for (int i=1;i<=n;i++)
{
for (int j=1;j<=i;j++) printf("%0.3f ",w[j][i]);
printf("\n");
}
*/
return ;
}

bzoj 1261 区间DP的更多相关文章

  1. BZOJ 1068 (区间DP)

    题意:字符串的压缩,f[l][r][0]代表还没M,f[l][r][1]代表有M. #include<cstdio> #include<cmath> #include<c ...

  2. BZOJ 1055 区间DP

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1144  Solved: 668[Submit][Statu ...

  3. BZOJ 1260 - 区间dp

    Magic Door 题目大意: 给一个字符串,问需要至少覆盖多少次. 题目分析 区间dp: dp[i][j]表示达到i~j这个状态的最少覆盖次数,分两种情况: s[i] == s[j]: 此时内层可 ...

  4. BZOJ 1090 - 区间dp

    Magic Door 题目大意: 给一个字符串,可以将重复的串缩成x(a),表示x个a,求能缩成的最小长度. 题目分析 区间dp: dp[i][j]表示i~j处理后的最小长度, 则有 \[dp[i][ ...

  5. bzoj 1996 区间dp

    1996: [Hnoi2010]chorus 合唱队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1727  Solved: 1115[Submit][ ...

  6. [CQOI2007]涂色 BZOJ 1260 区间dp

    题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个 ...

  7. BZOJ 2037 区间DP

    跟POJ 3042是一个类型的http://blog.csdn.net/qq_31785871/article/details/52954924 思路: 先排个序 (把初始位置也插进去) f[i][j ...

  8. BZOJ.4897.[Thu Summer Camp2016]成绩单(区间DP)

    BZOJ 显然是个区间DP.令\(f[l][r]\)表示全部消掉区间\([l,r]\)的最小花费. 因为是可以通过删掉若干子串来删子序列的,所以并不好直接转移.而花费只与最大最小值有关,所以再令\(g ...

  9. [BZOJ 1652][USACO 06FEB]Treats for the Cows 题解(区间DP)

    [BZOJ 1652][USACO 06FEB]Treats for the Cows Description FJ has purchased N (1 <= N <= 2000) yu ...

随机推荐

  1. 在 Range 对象中,Min (14)必须小于或等于 max (-1)。

    DataTable dt = ds.Tables[]; DataRow[] drs = dt.Select("Id=" + categoryID ); 解决方法:将参数用单引号阔起 ...

  2. jdbc关闭连接顺序

    jdbc连接数据库时,先获取connection,再通过statement进行操作,将结果集放在resultset中,不过在关闭数据库的时候要小心,要跟前面的操作反着来,不然就会出现异常.如果直接关闭 ...

  3. Swift & Unicode

    Swift & Unicode emoji let == const https://www.runoob.com/swift/swift-basic-syntax.html

  4. Runtime之IMP指针,isa指针

    要了解 isa 指针先了解下类的定义在xcode中用快捷键Shift+Cmd+O 搜索objc.h 能看到类的定义:了解 Paste_Image.png 可以看出:objc_object:Object ...

  5. 【bzoj3932】[CQOI2015]任务查询系统 离散化+主席树

    题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei ...

  6. Python爬取B站视频信息

    该文内容已失效,现已实现scrapy+scrapy-splash来爬取该网站视频及用户信息,由于B站的反爬封IP,以及网上的免费代理IP绝大部分失效,无法实现一个可靠的IP代理池,免费代理网站又是各种 ...

  7. CF527A:Playing with Paper——题解

    https://vjudge.net/problem/CodeForces-527A http://codeforces.com/problemset/problem/527/A 题目大意:一个纸长a ...

  8. ACE的安装

    转载于:http://www.cnblogs.com/TianFang/archive/2006/12/03/580714.html ACE的安装是一件比较麻烦的事情,这里简单的记录了我在VS2005 ...

  9. Ultra-QuickSort POJ - 2299 树状数组求逆序对

    In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a seque ...

  10. Dynamic len(set(a[L:R])) UVA - 12345(这么过分一定要写博客)

    给出一个有n个元素的数组,有以下两种操作:Q x y,求出区间[x,y)内不同元素的个数, M x y,把第x个元素的值修改为y.注意题目中的下标是从0开始的 这题超级超级坑 妈的一个水题找了几个小时 ...