首页 > 其他分享 >abc366_f

abc366_f

时间:2024-08-21 21:39:40浏览次数:7  
标签:int ll 我们 MaxN include abc366 dp

思路

考虑 \(dp\),那么我们就需要装压 \(dp\),所以我们考虑是否可以通过改变拓扑序,来让题目变成我们熟悉的背包 \(dp\),所以我们来思考一下,什么时候交换顺序反而更优?

考虑 \(i\) 和 \(i + 1\),那么如果为 \(f_{i+1}(f_i(x))\) 那么贡献为:

\(a_{i+1}(a_{i}x+b_{i})+b_{i+1}\)

如果交换那么贡献为:

\(a_{i}(a_{i+1}x+b_{i + 1}) + b_{i}\)

那么如果可以交换,我们便可以通过两个式子的比较来算出比较器该怎么写。

可是我们怎么保证这是对的呢?考虑到这个式子的形式,对于之前的我们将视之为 \(x\),所以不会因为现在的变动改变之前的,对于后面的,我们的变动,对于后面的只是 \(x\) 的变动,对于决策不产生影响,所以这个交换是可行的。

code

#include <algorithm>
#include <iostream>
#include <cstring>

using namespace std;
using ll = long long;

const int MaxN = 1e6 + 10;

struct S {
  ll a, b;

  bool operator<(const S &j) const {
    return (j.a - 1) * b > (a - 1) * j.b;
  }
} a[MaxN];

ll f[MaxN][20], n, k;

int main() {
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].a >> a[i].b;
  }
  sort(a + 1, a + n + 1);
  memset(f, -1, sizeof(f));
  f[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= k; j++) {
      f[i][j] = f[i - 1][j];
      (j && f[i - 1][j - 1] >= 0) && (f[i][j] = max(f[i][j], a[i].a * f[i - 1][j - 1] + a[i].b));
    }
  }
  cout << f[n][k] << endl;
  return 0;
}

标签:int,ll,我们,MaxN,include,abc366,dp
From: https://www.cnblogs.com/ybtarr/p/18358967

相关文章

  • ABC366D 题解
    第一眼是想写\(kd-tree\)的。然后发现这就是一道三维前缀和的板子题。三维前缀和要想学习三维前缀和,我们首先得了解前缀和的概念,并且学会一维、二维前缀和。什么是前缀和前缀和是容斥原理的典型应用。这种优化方式可以使求和操作的时间复杂度降低到\(O(1)\)(但是需要提前预......
  • ABC366 G - XOR Neighbors 题解
    发现题目实质上就是让你构造一组\(a_{1,2,\dots,n}\),有一些限制,要求一些\(a\)异或起来是\(0\)。看到\(n\le60\),果断列异或方程组,用异或高斯消元。具体地,有\(n\)个方程组,\(a_{i,j}\)表示第\(i\)个方程中\(j\)的系数。对于每一个变量\(i\),要把\(j>i\)的方程中的第......
  • ABC366D 题解
    Solution题意简述给你一个正整数\(N\)和\(N^3\)个非负整数,表示为\(A_{x,y,z}\)其中\(1\leqx,y,z\leqN\)。您将得到以下格式的\(Q\)个查询,必须按顺序处理。对于第\(i\)次查询\((1\leqi\leqQ)\),您将得到一个整数元组\((Lx_i,Rx_i,Ly_i,Ry_i,Lz_i,......
  • ABC366F Maximum Composition 题解
    ABC366FMaximumComposition题解题目大意给定\(N\)个一次函数\(f_i(x)=a_ix+b_i\),从中选出\(K\)个函数\(f_{p_1},f_{p_2},\dots,f_{p_K}\),使得\(f_{p_1}(f_{p_2}(\dotsf_{p_K}))\)最大,求最大值。Solve考虑这样一种情况:我已经选定\(p_{k+1},p_{k+1},\dots,p_K\),现......
  • ABC366F 题解
    Solution题意简述现在有\(N\)个线性函数\(f_1,\dots,f_N\)。函数\(f_i(x)=A_ix+B_i\)。找到一个长度为\(K\)的序列\(p=(p_1,\dots,p_k)\),序列元素为\(K\)个大小在\([1,N]\)的不同整数。输出\(f_{p_1}(f_{p_2}(\dotsf_{p_k}(1)\dots))\)可能的最大值。思路贪心......
  • ABC366E 题解
    Solution题意简述二维平面上有\(N\)个点\((x_1,y_1),\dots,(x_N,y_N)\)和一个非负整数\(D\)。求有多少对点对\((x,y)\)满足\(\sum\limits_{i=1}^N(|x-x_i|+|y-y_i|)\leD\)。思路发现\(x_i\)与\(y_i\)的捆绑关系不强(其实是几乎没有关联),所以我们分开考虑,也就是先......
  • [ABC366C] Balls and Bag Query 题解
    [ABC366C]BallsandBagQuery题解题目传送门AT原题传送门首先是题面的翻译:你有一个袋子,给予\(Q\)次操作,操作有三种1\(x\),将一个写有整数\(x\)的球放入袋中。2\(x\),从袋中取出一个写有整数\(x\)的球。3,查询袋中球上的不同整数的数目。整理了一下思......
  • [ABC366D] Cuboid Sum Query 题解
    [ABC366D]CuboidSumQuery题解原题传送门AT原题传送门题意翻译:给予一个\(N\timesN\timesN\)的三维矩阵,有\(Q\)次询问,对于每次询问,给与四个数,分别为\(L_1,R_1,L_2,R_2,L_3,R_3\)求在三维矩阵中\(a[L_1][L_2][L_3]\)到\(a[R_1][R_2][R_3]\)的区间和。三维前缀......
  • 题解:AT_abc366_c [ABC366C] Balls and Bag Query
    题意给你一个可重集,要求支持插入,删除,元素种类查询三种操作。分析直接乱搞,用一个桶记录每种数字的出现次数,再用一个变量\(sum\)记录元素种类数。插入的时候看看当前该元素出现次数是否为\(1\),删除的时候看看当前元素出现次数是否为\(0\),如果是的话让\(sum\)相应加减即可......
  • ABC366 题解
    D-CuboidSumQuery三维前缀和。不过有一维范围小,可以暴力然后二位前缀和。E-ManhattanMultifocalEllipse横纵坐标的距离是独立的。扫描线扫横坐标,维护每个可行点的纵坐标的距离和,查询就是\(\lex\)的数的个数。可以通过桶做到线性。F-MaximumCompositionExchan......