part 1 暴力

不难发现有一个 $\mathcal O(K^2n)$ 的基础 dp:

$$f_{i,j+l}=\min(f_{i,j+l},f_{i-1,j}+(x_i-x_{i-1})jj+c_i*l)$$

这其中 f 代表在第 i 个点已经买了 j+l 个,其中当前第 i 个点买了 l 个,前 i-1 个点买了 j 个的最小价值。

这样的话可以水到 $90pts$,但是如果是联赛的话应该没有这么高的暴力分。

code

#include<bits/stdc++.h>
#define int long long
#define N 10005
using namespace std;
int E,K,f[N],n,c[N],x[N],dp[502][N],sum[N];
struct mm
{int c,x,f;}p[N];
namespace AYX
{ inline bool cmp(mm i,mm j){return i.x<j.x;}
inline short main()
{ scanf("%lld%lld%lld",&K,&E,&n);
for(int i=1;i<=n;++i)scanf("%lld%lld%lld",&p[i].x,&p[i].f,&p[i].c);
memset(dp,0x3f3f3f3f,sizeof(dp));
dp[1][0]=0;
sort(p+1,p+1+n,cmp);
p[n+1].x=E;p[n+1].f=K;
for(int i=1;i<=n+1;++i)sum[i]=sum[i-1]+p[i].f;
for(int i=2;i<=n+1;++i)
for(int j=0;j<=min(K,sum[i-1]);++j)
for(int l=0;l<=p[i-1].f;++l)
{ if(l+j>K)break;
dp[i][j+l]=min(dp[i][j+l],dp[i-1][j]+p[i-1].c*l+(j+l)*(j+l)*(p[i].x-p[i-1].x));
}
printf("%lld\n",dp[n+1][K]);
return 0;
}
}
signed main()
{return AYX::main();
}

part 2 单调队列优化 dp

对式子进行转换,我们能够得到:

$$f_{i,k}=\min(f_{i,j},f_{i-1,j}+(x_i-x_{i-1})jj-c_ij)+c_ik$$

这样 $c_i\times j$ 会变成一个常数,式子只和 i 和 j 有关。

采用单调队列使复杂度降到 $\mathcal O(Kn)$ 稳稳通过。

当然还可以用二进制优化背包来降复杂度,只不过不如单调队列快。

code

#include<bits/stdc++.h>
#define int long long
#define N 10005
using namespace std;
int E,K,f[N],n,c[N],x[N],dp[502][N],sum[N],dui[N],head,tail;
struct mm
{int c,x,f;}p[N];
namespace AYX
{ inline bool cmp(mm i,mm j){return i.x<j.x;}
inline int calc(int i,int j)
{return dp[i-1][j]+(p[i].x-p[i-1].x)*j*j-j*p[i].c;}
inline short main()
{ scanf("%lld%lld%lld",&K,&E,&n);
for(int i=1;i<=n;++i)scanf("%lld%lld%lld",&p[i].x,&p[i].f,&p[i].c);
memset(dp,0x3f3f3f3f,sizeof(dp));
dp[0][0]=0;
sort(p+1,p+1+n,cmp);
for(int i=1;i<=n;++i)
{ head=1;tail=0;
for(int j=0;j<=K;++j)
{ int val=calc(i,j);
while(head<=tail and calc(i,dui[tail])>val)tail--;
while(head<=tail and j-p[i].f>dui[head])++head;
dui[++tail]=j;
dp[i][j]=calc(i,dui[head])+p[i].c*j;
}
}
printf("%lld\n",dp[n][K]+(E-p[n].x)*K*K);
return 0;
}
}
signed main()
{return AYX::main();
}

[USACO10NOV]Buying Feed G的更多相关文章

  1. P4544 [USACO10NOV]Buying Feed G

    part 1 暴力 不难发现有一个 $\mathcal O(K^2n)$ 的基础 dp: $$f_{i,j+l}=\min(f_{i,j+l},f_{i-1,j}+(x_i-x_{i-1})\time ...

  2. ACM BUYING FEED

    BUYING FEED 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 Farmer John needs to travel to town to pick up ...

  3. 2020: [Usaco2010 Jan]Buying Feed, II

    2020: [Usaco2010 Jan]Buying Feed, II Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 220  Solved: 162[ ...

  4. BUYING FEED

    Problem F: F BUYING FEED Description Farmer John needs to travel to town to pick up K (1 <= K < ...

  5. 洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II

    洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II https://www.luogu.org/problemnew/show/P2616 题目描述 Farmer ...

  6. USACO Buying Feed, II

    洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II 洛谷传送门 JDOJ 2671: USACO 2010 Jan Silver 2.Buying Feed, II ...

  7. 【P2616】 【USACO10JAN】购买饲料II Buying Feed, II

    P2616 [USACO10JAN]购买饲料II Buying Feed, II 题目描述 Farmer John needs to travel to town to pick up K (1 &l ...

  8. [USACO10NOV]购买饲料Buying Feed 单调队列优化DP

    题目描述 约翰开车来到镇上,他要带 KKK 吨饲料回家.运送饲料是需要花钱的,如果他的车上有 XXX 吨饲料,每公里就要花费 X2X^2X2 元,开车D公里就需要 D×X2D\times X^2D×X ...

  9. P4544 [USACO10NOV]购买饲料Buying Feed

    额,直接思路就dp吧.(我还想了想最短路之类的233但事实证明不行2333.....) 直入主题: 化简题意:在x轴上有n个点,坐标为xi.从原点出发,目标点为e,在途中需要收集K重量的物品,在每个点 ...

随机推荐

  1. 轻松入门vue系列

    一.vue基础语法 二.vue组件化开发 三.Vue前后端交互 四.vue前端路由 喜欢不要忘了点个赞哟

  2. 1、Spark简介(Python版)

    此文为个人学习笔记如需系统学习请访问http://dblab.xmu.edu.cn/blog/1709-2/ Spark具有如下几个主要特点:  运行速度快    Spark使用先进的DAG(Dir ...

  3. ObjectInputStream和ObjectOutputStream

    package stream.object; import java.io.FileInputStream; import java.io.FileOutputStream; import java. ...

  4. Servlet常见问题

    时间:2016-12-6 23:18 java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMapcommo ...

  5. 了解Prometheus

    了解Prometheus 标签(空格分隔): 监控 介绍 Prometheus是用来收集和存储服务器的实时数据(比如:CPU.硬盘.服务响应.日志等),通过其丰富的运算函数,可以计算得到很多的服务性能 ...

  6. 基于源码编译的lnmp架构实现论坛的搭建及memcache的应用

    系统环境: RHEL6 x86-64 selinux and iptables disabled LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构 Linux是一类 ...

  7. 一、部署sqlserver

    1.下载并挂载sqlserver镜像 2.填写秘钥:6GPYM-VHN83-PHDM2-Q9T2R-KBV83 3.默认下一步 4.勾选需要的功能 5.默认下一步 6.默认下一步 等待安装完成即可. ...

  8. Java调用腾讯云短信接口,完成验证码的发送(不成功你来砍我!!)

    一.前言 我们在一些网站注册页面,经常会见到手机验证码的存在,这些验证码一般的小公司都是去买一些大的厂家的短信服务,自己开发对小公司的成本花费太大了!今天小编就带着大家来学习一下腾讯云的短信接口,体验 ...

  9. Appium问题解决方案(5)- selenium.common.exceptions.InvalidSelectorException: Message: Locator Strategy 'name' is not supported for this session

    背景 使用Appium Server 1.15.1版本 执行了以下脚本 test = driver.find_element_by_name("自动化测试") print(test ...

  10. CSS导航菜单(二级菜单)

    index.html <div class="nav"> <ul> <li> <a href="#">Java& ...