清北学堂模拟赛day7 石子合并加强版
- /*
- 注意到合并三堆需要枚举两个端点,其实可以开一个数组记录合并两堆的结果,标程好像用了一个神奇的优化
- */
- #include<iostream>
- #include<cstdio>
- #include<string>
- #include<cstring>
- #include<algorithm>
- #include<cmath>
- #include<vector>
- #define ll long long
- #define fo(i,l,r) for(int i = l;i <= r;i++)
- #define fd(i,l,r) for(int i = r;i >= l;i--)
- using namespace std;
- const int maxn = ;
- ll read(){
- ll x=,f=;
- char ch=getchar();
- while(!(ch>=''&&ch<='')){if(ch=='-')f=-;ch=getchar();};
- while(ch>=''&&ch<=''){x=x*+(ch-'');ch=getchar();};
- return x*f;
- }
- int n;
- ll dp[maxn][maxn],dp2[maxn][maxn],val[maxn],sum[maxn];
- int main(){
- freopen("merge.in","r",stdin);
- freopen("merge.out","w",stdout);
- n = read();
- memset(dp,/,sizeof(dp));
- memset(dp2,/,sizeof(dp2));
- fo(i,,n) val[i] = read();
- fo(i,,n){
- dp[i][i] dp2[i][i] = ;
- sum[i] = sum[i-] + val[i];
- }
- for(int l = ;l <= n;l+=){
- for(int i = ;i + l - <= n;i++){
- int j = i + l - ;
- for(int k1 = i;k1 <= j;k1 += ){
- for(int k2 = k1 + ;k2 <= j;k2 += ){
- dp[i][j] = min(dp[i][j],dp[i][k1] + dp[k1+][k2] + dp[k2+][j] + sum[j] - sum[i-]);
- }
- }
- }
- }
- cout<<dp[][n];
- return ;
- }
- #include<iostream>
- #include<algorithm>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<cstdlib>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef pair<int,int> pr;
- const double pi=acos(-);
- #define rep(i,a,n) for(int i=a;i<=n;i++)
- #define per(i,n,a) for(int i=n;i>=a;i--)
- #define Rep(i,u) for(int i=head[u];i;i=Next[i])
- #define clr(a) memset(a,0,sizeof a)
- #define pb push_back
- #define mp make_pair
- #define putk() putchar(' ')
- ld eps=1e-;
- ll pp=;
- ll mo(ll a,ll pp){if(a>= && a<pp)return a;a%=pp;if(a<)a+=pp;return a;}
- ll powmod(ll a,ll b,ll pp){ll ans=;for(;b;b>>=,a=mo(a*a,pp))if(b&)ans=mo(ans*a,pp);return ans;}
- ll gcd(ll a,ll b){return (!b)?a:gcd(b,a%b);}
- ll read(){
- ll ans=;
- char last=' ',ch=getchar();
- while(ch<'' || ch>'')last=ch,ch=getchar();
- while(ch>='' && ch<='')ans=ans*+ch-'',ch=getchar();
- if(last=='-')ans=-ans;
- return ans;
- }
- void put(ll a){
- if(a<)putchar('-'),a=-a;
- int top=,q[];
- while(a)q[++top]=a%,a/=;
- top=max(top,);
- while(top--)putchar(''+q[top+]);
- }
- //head
- #define INF 1000000000
- #define N 410
- int n,f1[N][N],f2[N][N],a[N];
- int main(){
- freopen("merge.in","r",stdin);
- freopen("merge.out","w",stdout);
- n=read();
- rep(i,,n)
- rep(j,,n)f1[i][j]=f2[i][j]=INF;
- rep(i,,n)a[i]=a[i-]+read();
- rep(i,,n)f2[i][i]=;
- rep(i,,n-)f1[i][i+]=a[i+]-a[i-];
- rep(len,,n)
- rep(i,,n-len+){
- int j=i+len-;
- rep(k,i,j-)f2[i][j]=min(f2[i][j],f1[i][k]+f2[k+][j]+a[j]-a[k]);
- rep(k,i,j-)f1[i][j]=min(f1[i][j],f2[i][k]+f2[k+][j]+a[j]-a[i-]);
- }
- cout<<f2[][n]<<endl;
- return ;
- }
清北学堂模拟赛day7 石子合并加强版的更多相关文章
- 清北学堂模拟赛day7 数字碰撞
/* clj:水题别人都满分你不是你就完了,所以说水题一定要细心一点,有这么几个细节:①前导零的处理,全是零的时候要特判②换行要注意,不要多大一行,剩下就是水水的模拟了 */ #include< ...
- 清北学堂模拟赛day7 错排问题
/* 考虑一下已经放回m本书的情况,已经有书的格子不要管他,考虑没有书的格子,不考虑错排有(n-m)!种,在逐步考虑有放回原来位置的情况,已经放出去和已经被占好的格子,不用考虑,剩下全都考虑,设t=x ...
- 清北学堂模拟赛d1t6 或和异或(xor)
题目描述 LYK最近在研究位运算,它研究的主要有两个:or和xor.(C语言中对于|和^) 为了更好的了解这两个运算符,LYK找来了一个2^n长度的数组.它第一次先对所有相邻两个数执行or操作,得到一 ...
- 清北学堂模拟赛d4t5 b
分析:一眼树形dp题,就是不会写QAQ.树形dp嘛,定义状态肯定有一维是以i为根的子树,其实这道题只需要这一维就可以了.设f[i]为以i为根的子树中的权值和.先处理子树内部的情况,用一个数组son[i ...
- 清北学堂模拟赛d4t1 a
分析:大模拟,没什么好说的.我在考场上犯了一个超级低级的错误:while (scanf("%s",s + 1)),导致了死循环,血的教训啊,以后要记住了. /* 1.没有发生改变, ...
- 清北学堂模拟赛d3t6 c
分析:比较神奇的一道题.要把树变成环肯定要先变成链,然后把链给拼接成环.接下来考虑一个脑洞大开的树形dp:设f[i][0]表示i不与父节点相连的链数,f[i][1]表示i与父节点相连的链数,先考虑怎么 ...
- 清北学堂模拟赛d6t6 棋盘迷宫
3.棋盘迷宫(boardgame.pas/c/cpp)(boardgame.in/out)时间限制:5s/空间限制:256M[题目描述]小 A 和小 Z 是非常要好的朋友, 而且他们都对迷宫游戏非常有 ...
- 清北学堂模拟赛d1t2 火柴棒 (stick)
题目描述众所周知的是,火柴棒可以拼成各种各样的数字.具体可以看下图: 通过2根火柴棒可以拼出数字“1”,通过5根火柴棒可以拼出数字“2”,以此类推. 现在LYK拥有k根火柴棒,它想将这k根火柴棒恰好用 ...
- 清北学堂模拟赛d1t1 位运算1(bit)
题目描述LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥有的价值.例如数字123拥有6的价值,数字999拥有27的价值.假设数字N的价值是K,LYK想找到一个 ...
随机推荐
- Redmine 插件安装
将对应的插件都复制进redmine的plugins 安装对应所需要的GEMS bundle install --without development test rmagick 执行插件合并 bund ...
- Linux服务器磁盘扩展和oracle表空间文件迁移操作记录
1.环境介绍 服务器硬件:Dell R710 服务器OS:红帽子Linux RHEL4.8 数据库:Oracle 10g 2.出现的问题 因为数据表每天有上百万的数据写入表,加上建立索引,导致表空 ...
- CF444C. DZY Loves Colors[线段树 区间]
C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 洛谷11月月赛round.2
P3414 SAC#1 - 组合数 题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣 ...
- 常用IDEA快捷键
[转]常用IDEA快捷键 阿烈的博客 2013-06-29 72 阅读 最近已经从eclipse转到IntelliJ IDEA,IDEA用起来太顺手了,许多功能正合我意. 看到时光印记写的一篇&l ...
- [No000069]Javascript中this关键字详解
Quiz 请看下面的代码,最后alert出来的是什么呢?(chrome下按F12,选择Console直接复制粘贴运行) var name = "Bob"; var nameObj ...
- HAOI2015 泛做
T1 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间的 ...
- RAID级别
raid磁盘阵列,我们一般使用RAID 5,挂载单独硬盘测试读写速度,一般使用RAID0.
- JS禁止选中文本方法
if (typeof(element.onselectstart) != "undefined") { // IE下禁止元素被选取 element.onselectstart = ...
- 微信小程序之生命周期(三)
[未经作者本人同意,请勿以任何形式转载] 上一篇介绍微信小程序开发工具使用和项目目录结构. 这一章节介绍微信小程序的生命周期,什么是生命周期呢? 通俗的讲,生命周期就是指一个对象的生老病死. 从软件的 ...