博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU5697 刷题计划 dp+最小乘积生成树
阅读量:4310 次
发布时间:2019-06-06

本文共 1505 字,大约阅读时间需要 5 分钟。

分析:就是不断递归寻找靠近边界的最优解

学习博客(必须先看这个):

1:http://www.cnblogs.com/autsky-jadek/p/3959446.html

2:http://blog.csdn.net/u013849646/article/details/51524748

注:这里用的最小乘积生成树的思想,和dp结合

     每次找满足条件的最优的点,只不过BZOJ裸题的满足条件是形成一棵树

     这个题是大于m,生成树借用最小生成树进行求解最优,大于m用dp进行求解最优

#include 
#include
using namespace std;const int N = 8e2+5;typedef long long LL;struct point{ int x, y; point(int x=0,int y=0):x(x),y(y){} point operator -(const point &rhs)const{ return point(x-rhs.x,y-rhs.y); } point operator +(const point &rhs)const{ return point(x+rhs.x,y+rhs.y); }};LL cross(point a,point b){ return 1ll*a.x*b.y-1ll*a.y*b.x;}int n,m,sum;int a[N],b[N],c[N];point p[N];LL dp[N],f[N],ans;point get(){ p[0]=point(0,0),dp[0]=0; for(int i=1;i<=sum;++i)dp[i]=1LL<<60; for(int i=1;i<=n;++i){ for(int j=sum;j>=a[i];--j){ if(dp[j]>dp[j-a[i]]+f[i]){ dp[j]=dp[j-a[i]]+f[i]; p[j]=p[j-a[i]]+point(b[i],c[i]); } } } int ret=m; LL tot=1LL*p[ret].x*p[ret].y; for(int i=m+1;i<=sum;++i){ if(dp[i]
=0)return; solve(A,C);solve(C,B);}int main(){ while(~scanf("%d%d",&n,&m)){ sum=0; for(int i=1;i<=n;++i){ scanf("%d%d%d",&a[i],&b[i],&c[i]); sum+=a[i]; } ans=1LL<<60; for(int i=1;i<=n;++i)f[i]=b[i]; point A=get(); for(int i=1;i<=n;++i)f[i]=c[i]; point B=get(); solve(A,B); printf("%I64d\n",ans); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/shuguangzw/p/5634463.html

你可能感兴趣的文章
克罗谈投资策略04_感觉与现实
查看>>
通向财务自由之路01_导读
查看>>
通向财务自由之路02_成功的决定因素:你
查看>>
中低频量化交易策略研发01_引言
查看>>
中低频量化交易策略研发06_推进的择时策略
查看>>
史丹·温斯坦称傲牛熊市的秘密
查看>>
期货市场技术分析01_理论基础
查看>>
期货市场技术分析02_趋势的基本概念
查看>>
期货市场技术分析03_主要反转形态
查看>>
期货市场技术分析04_持续形态
查看>>
期货市场技术分析05_交易量和持仓兴趣
查看>>
TB交易开拓者入门教程
查看>>
TB创建公式应用dll失败 请检查用户权限,终极解决方案
查看>>
python绘制k线图(蜡烛图)报错 No module named 'matplotlib.finance
查看>>
talib均线大全
查看>>
期货市场技术分析06_长期图表和商品指数
查看>>
期货市场技术分析07_摆动指数和相反意见理论
查看>>
满屏的指标?删了吧,手把手教你裸 K 交易!
查看>>
不吹不黑 | 聊聊为什么要用99%精度的数据回测
查看>>
高频交易的几种策略
查看>>