JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿
来源:互联网 发布:mac axure 没响应 编辑:程序博客网 时间:2024/04/29 16:02
Description
Input
Output
Sample Input
2
2
15 19
3
30 40 20
Sample Output
285
2600
Data Constraint
Solution
这题我用的是动态规划的解法(用类似分治的 DFS 过程实现)。
设
F[l][r] 表示将[l,r] 这段区间的材料全部合并、变成一份材料的最小花费。再设
G[l][r] 表示将[l,r] 这段区间的材料全部合并成一份材料其魔力值。那么递归时,若
F[l][r]>=0 ,说明之前已处理过这个区间,可以直接退出(记忆化)。否则我们枚举
i(l≤i≤r) 分别递归[l,i] 和[i+1,r] 两个小区间,再合并大的区间。可以得出转移方程式:
F[l][r]=Min{G[l][i]∗G[i+1][r]+F[l][i]+F[i+1][r]} 若成功转移,则也要更新
G[l][r] 的值:g[l][r]=(g[l][i]+g[i+1][r])%100 那么最终答案即为
F[1][N] ,时间复杂度O(N3) 。
Code
#include<cstdio>#include<cstring>using namespace std;const int N=101;int f[N][N],g[N][N];inline int read(){ int X=0,w=1; char ch=0; while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();} while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar(); return X*w;}inline int dfs(int l,int r){ if(f[l][r]>=0) return f[l][r]; for(int i=l;i<r;i++) { int x=dfs(l,i),y=dfs(i+1,r); if(f[l][r]<0 || x+y+g[l][i]*g[i+1][r]<f[l][r]) { f[l][r]=g[l][i]*g[i+1][r]+x+y; g[l][r]=(g[l][i]+g[i+1][r])%(N-1); } } return f[l][r];}int main(){ int T=read(); while(T--) { int n=read(); memset(f,-1,sizeof(f)); for(int i=1;i<=n;i++) g[i][i]=read(),f[i][i]=0; printf("%d\n",dfs(1,n)); } return 0;}
阅读全文
1 0
- JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿
- JZOJ 5264. 【NOIP2017模拟8.12A组】化学
- JZOJ 5373. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
- JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计
- JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计
- 【JZOJ 4931】【NOIP2017提高组模拟12.24】A
- 【JZOJ 4931】【NOIP2017提高组模拟12.24】A
- JZOJ 5195. 【NOIP2017提高组模拟7.3】A
- JZOJ 100026. 【NOIP2017提高A组模拟7.7】图
- JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
- jzoj. 100031. 【NOIP2017提高A组模拟7.9】外星密码
- JZOJ 100035【NOIP2017提高A组模拟7.10】区间
- JZOJ 100036 【NOIP2017提高A组模拟7.10】随机
- JZOJ 100037【NOIP2017提高A组模拟7.11】后缀数组
- JZOJ 100035. 【NOIP2017提高A组模拟7.10】区间
- JZOJ 100041. 【NOIP2017提高A组模拟7.12】列车调度
- JZOJ 100045. 【NOIP2017提高A组模拟7.13】好数
- JZOJ 100046. 【NOIP2017提高A组模拟7.14】收集卡片
- getline c分格和c++风格
- Struts2知识点回顾(七)Struts2常用标签
- GC性能优化-参考手册翻译
- 基于Xfire实现webservice的超时设置
- JVM(4)垃圾回收
- JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿
- 程序:找出两个链表的第一个公共节点及c++中堆栈、队列的基本操作
- 完数
- JVM参数设置规则以及参数含义
- [JLOI2014]松鼠的新家
- 《西瓜书》笔记11:特征选择方法(二)
- Bone Collector(01背包问题)
- 浏览器引擎
- 文章标题 POJ 2104: K-th Number(主席树)