首页 > 其他分享 >P9140 [THUPC 2023 初赛] 背包

P9140 [THUPC 2023 初赛] 背包

时间:2023-10-06 17:46:54浏览次数:44  
标签:frac ll P9140 初赛 times 2023 rl 短路 同余

prologue

这很难评(调了我 1h,我都想紫砂了。
还是典型得不重构就看不见系列。
image
image

analysis

如果我们还是一个正常人,那么我们大体上是能看到题目的加粗字,这个格式很明显符合我们的同余最短路的格式。(如若不知,请先出门直走

然后我们就要考虑这个同余最短路的实现。这个题目不同于往常的同余最短路,而是新增了一个条件。除了显然得他是给到完全背包,我们决定用同余最短路解决之后,我们该考虑怎么让他这个完全背包利益最大化。

(不知道你们有没有,反正我学 01背包的时候是先教的我用单位价值进行排序然后一个一个加。)

我们就可以借助上述的贪心,先找到单位体积最大的即 \(\frac{c_i}{v_i}\),这个很好实现,即在实现输入的时候发现 \(\frac{c_i}{v_i} > \frac{w}{m}\),更新\(m\)、\(w\)即可,为了规避整数除法,我们将式子转换成 \(c_i \times m > w \times a_i\)就可以实现维护。

之后就是我们进行同余最短路的时候。

附上一句:同余最短路写最短路就好比打游戏玩原神。

下面不讲常规方法,讲的是转圈做法。(都 3202 年了你还不会转圈?那就赶紧左转或者右转到大佬的博客进行学习。)

之后是统计答案。(下面的过程参考了大佬的这篇博客,想看原汁原味的可以去这位大佬的博客中查看)

令 \(v \gets V \bmod m, v < V\),这个时候我们将考虑到最终最大值为 \(C + \frac{V - v}{m} \times w\),也就是我们要求 \(C - \frac{v}{m} \times w\) 最大。也就得到我们的转移方程:

\[f_p \gets f_t + c[i] - ((t + a[i]) / m) \times w, t = p \]

我们在查询答案的时候,如果这个位置的 f 值不为 \(-∞\) 就得到:

\[ans \gets f[p] + \frac{v}{m} \times w \]

code time

马蜂优良。

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define rl register ll

constexpr ll N = 55, M = 1e5 +10;

ll n, m = 1, q, a[N], f[M], c[N], ans, w;

inline ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }

int main()
{
    // freopen("1.in", "r", stdin), freopen("1.out", "w", stdout);

    cin >> n >> q;

    for(rl i=1; i <= n; ++ i) 
    {
        cin >> a[i] >> c[i];
        if(w * a[i] < m * c[i]) w = c[i], m = a[i];
    }

    for(rl i=1; i < m; ++ i) f[i] = -1e18;
    for(rl i=1; i <= n; ++ i)
        for(rl j=0, lim = gcd(m, a[i]); j < lim; ++ j)
            for(rl t = j, asd = 0; asd < 2; asd += t == j)
            {
                ll p = (t + a[i]) % m;
                f[p] = max(f[p], f[t] + c[i] - ((t + a[i]) / m) * w), t = p;
            }

    while(q -- )
    {
        ll v; cin >> v;
        ll p = v % m;
        if(f[p] < -1e17) puts("-1");
        else cout << f[p] + v / m * w << endl;
    }
    return 0;
}

标签:frac,ll,P9140,初赛,times,2023,rl,短路,同余
From: https://www.cnblogs.com/carp-oier/p/17744760.html

相关文章

  • 2023-10-06
    一、第一次直接就焊MCU了,C8T6都焊的乌漆嘛黑的,再也不用松香了。SMT报价发BOM和Gerber过去,总共遥控和核心板2块贴片,不包含运费物料。要600大洋。。。。。 二、买了块练习板,又买了几块C8T6,总不可能焊坏100次。1.MCU焊接方法:所有焊点上锡,点焊法。  2.小元器件贴片:焊点上锡......
  • 武汉大学2023年新生程序设计竞赛(同步赛)
    C.覆叶之交(线段树+离散化+扫描线)输入格式:输出格式:输入00230032-1-111输出11说明线段树+离散化+扫描线#include<bits/stdc++.h>#defineIOSios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr)#definelowbit(ver)ver&(-ver)......
  • 2022-2023 ICPC Central Europe Regional Contest
    The1stUniversalCup.Stage8:SloveniaD.Deforestation这道题出题人比较谜语人,对于一个分叉点,只能选择若干个儿子和父亲组成一组,剩下的儿子之间不能相互组合。所以从叶子节点开始贪心处理就好。对于一个父亲他有若干个儿子,就贪心的选择剩下部分更小的儿子。#include<bits......
  • 2023.10.5测试
    \[\text{NOIP模拟赛-2023.10.5}\]T1魔法少女定义\(f(i)\)为\(i\)所有约数的异或和,求\(f(1)\simf(n)\)的异或和\(1\leqn\leq10^{14}\)容易想到枚举约数然后计算出约数出现的次数并对答案做贡献,复杂度\(\mathcal{O}(n)\)发现约数\(x\)出现的次数即\(\left\lfloor......
  • 2023-2024-1 学号20231315《计算机基础与程序设计》第二周学习总结
    学期:2023-2024-1学号:20231315《计算机基础与程序设计》第二周学习总结作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1《计算机基础与程序设计》这个作业的目标学习计算机科学概论第1章和《C语言程序设计》第1......
  • 【GJOI 2023.10.5 T1】 雷老师的正偏态分布
    雷老师的正偏态分布题意:给出一个长度为\(n\)的\(a\)数组,其中\(1\lea_i\leV,1\lei\len\)。统计其中的满足平均数严格小于中位数且大小为奇数的子集数量,\(n\le100,V\le800\),时限\(4\)s。输入:510127910输出:8首先,可以考虑排序,保证一个子集中小......
  • 2023-10-06 useState数据渲染不同步==》async await
    业务:点击按钮增加数据并渲染出来。框架:antd+ts+react。原来写法:const[tagData,setTagData]=useState<Array<number>>([]);点击事件://添加标签constaddTag=()=>{letarr:(number)[]=[];arr=tagData;arr.push(Math.floor(Math.random()......
  • 2023-10-06 Warning: [antd: Switch] `value` is not a valid prop, do you mean `che
    该报错意思是你用的这个switch组件对应的属性应该是checked而不是value,后者应该是antd默认设置的属性,可以通过valuePropName来手动指定对应的属性值。如:<FormItemname="status"label="状态"valuePropName="checked"rules={[{required:true}]}><Switch/></FormIte......
  • 板刷2023.10.04
    CF1878F.VasilijeLovesNumberTheory题解:约数个数+取模性质对\(n\)质因子分解得到,\(n=p_1^{\alpha_1}p_2^{\alpha_2}...p_k^{\alpha_k}\)那么显然\(d(n)=(\alpha_1+1)\times(\alpha_2+1)...(\alpha_k+1)\)根据题意可以得到:\(n\%d(n)=0\)的时候一定......
  • 202310061227-《心得:低版本mysql配置一,些轮子插件》
    1.对于mysql5.7.42,驱动(connector)选择:5.1.46。2.测试链接时:useSSL=true&enabledTLSProtocols=TLSv1.1 驱动链接字符串上要拼接上。3.驱动链接字符串:高版本mysql,意味着高版本connector,选>=8;低版本,选择5.x;               高版本mysql,com.my......