首页 > 其他分享 >新赛道-2024.8 CSP-J组月赛-T4

新赛道-2024.8 CSP-J组月赛-T4

时间:2024-09-01 11:25:19浏览次数:3  
标签:赛道 node 5005 2024.8 T4 int 购买 店铺

题目描述

王老师 最近搬家了,需要购置 a 台家电、b 件家具和 c 个装饰。他来到了商场,商场正好在举行优惠大酬宾,每家店铺都推出了一系列活动。

一共有 n=a+b+c 家店铺,活动期间在第 i 家店铺购买家电只需要 ai​ 元一台,购买家具只需要 bi​ 元一件,购买装饰只需要 ci​ 元一个,但每一家店铺限定每位顾客最多只能购买一种类型的物品一个。

王老师 希望在满足采购需求的情况下总花费最少,你能帮帮他求出最小花费吗?

数据范围

对于所有数据 n,a,b,c≤5000,ai​,bi​,ci​≤109 ,保证 n=a+b+c 。

测试点数据范围
1∼4 n≤15
5∼10 n≤100
11∼14 c=0
15∼20 无限制

首先根据题面不难想到定义dp[i][j][k](表示经过i家店铺,买j台家电,k件家具,n-j-k个装饰的最小花费),但只能过%50分。

考虑优化:我们可以利用贪心来优化dp[i][j]表示考虑了1到i家店,选了j个装饰的最小费用,那么剩下i-j个物品就会按照贪心策略优先买购买家具,然后购买家电。

按b[i]-a[i]排序,便有以下转移方程

若i-j<=B f[i][j]=min(f[i-1][j-1]+c[i],f[i-1][j]+b[i])

否则:f[i][j]=min(f[i-1][j-1]+c[i],f[i-1][j]+a[i]);

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
int f[5005][5005],n,a,b,c;
struct node{
    int a,b,c;
}s[5005];
bool cmp(node x,node y){
    return x.b-x.a<y.b-y.a;
}
signed main(){
    freopen("buy.in","r",stdin);
    freopen("buy.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>a>>b>>c;
    for(int i=1;i<=n;i++)cin>>s[i].a>>s[i].b>>s[i].c;
    sort(s+1,s+n+1,cmp);
    memset(f,0x3f,sizeof(f));
    f[0][0]=0;
    for(int i=1;i<=n;i++)
        for(int j=0;j<=min(i,c);j++){
            if(i-j<=b)f[i][j]=f[i-1][j]+s[i].b;
            else f[i][j]=f[i-1][j]+s[i].a;
            if(j!=0)f[i][j]=min(f[i][j],f[i-1][j-1]+s[i].c);
        }
    cout<<f[n][c];
    return 0;
}
总结:T4在考场上写了个记忆化搜索,但是状态写错了,以至于与爆搜的20分都没拿到。。而且即便大样例过了,也有可能爆0,所以不能过度依赖大样例,需要自己造hack数据。

标签:赛道,node,5005,2024.8,T4,int,购买,店铺
From: https://www.cnblogs.com/qianqian2022/p/18391123

相关文章

  • 新赛道-2024.8 CSP-J组月赛-T3
    题目描述王老师的班级要开始评选三好学生啦,最后要评选两个人出来。王老师班级一共有 n 个学生,编号分别为 1,2,…,n,每个人把自己心中的两名最佳三好学生 a 和 b 告诉王老师。可能存在两个人,他们心中的两名最佳三好学生是相同的。例如样例1所示。现在王老师要选出......
  • 新赛道-2024.8 CSP-J组月赛-T1总结
    题面:王老师最近做了一道经典问题《翻纸牌》现在王老师有 n 张牌,编号分别为 1,2,3…n,每张牌一开始都是背面朝上的现在他要进行 n 轮操作,第 i 轮操作时候,他会将所有编号是 i 的倍数的牌正反翻面现在王老师想知道,当他进行完 n 轮操作以后,所有正面朝上的牌的编号......
  • Burp Suite Professional 2024.8 发布下载,新增功能概览
    BurpSuiteProfessional2024.8(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgBur......
  • 2024.8.31 总结(集训 考 DP)
    今天依然是上午考DP,三个小时四道题。我觉得今天的题目较昨天更简单。考场上就想出了四个题,但是我以为T1\(O(n^3)\)的做法是暴力,想了好久T1也没想出更好的做法,于是开写,然后造数据测了测,发现跑得比较快(极限数据应该也是能在我的位置上那台电脑里1s内过的)。结果出分是330,......
  • 2024.8.31随笔
    前言开学了,不能每天写东西发博客了,但是我还是准备拿笔记录一下每一天的东西,总之最近还不会停课,可以放松一段时间。但是文化课也不能落下啊喵!自习这段时间除了最开始写了一篇字符串的博客,其他时间都在写dp题。然后坚持写做题的感想和题解,虽然今天没有遇到好题,或者说看到题但没......
  • 2024.8.31杂记
    P1249最大乘积题目描述一个正整数一般可以分为几个互不相同的自然数的和,如\(3=1+2\),\(4=1+3\),\(5=1+4=2+3\),\(6=1+5=2+4\)。现在你的任务是将指定的正整数\(n\)分解成若干个互不相同的自然数(也可以不分解,就是这个数字本身)的和,且使这些自然数的乘积最大。输入格式只一个正整......
  • 2024.8.30 总结(集训 考 DP)
    上午三个多小时考四道题的DP。赛时会的分:[100](?)+100+[30](?)+100。估分:100+100+0+100。实际分:10+100+0+100。挂巨量的分,挂了120分。下面是一些值得注意的点:T1就是分组背包。DP数组下标要考虑负数可以直接全体加一个值变成非负的,[或者用map之类的](?)(&不......
  • 通义千问-VL-Chat-Int4
    Qwen-VL 是阿里云研发的大规模视觉语言模型(LargeVisionLanguageModel,LVLM)。Qwen-VL可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。Qwen-VL系列模型性能强大,具备多语言对话、多图交错对话等能力,并支持中文开放域定位和细粒度图像识别与理解。安装要求(......
  • 2024.8.29 总结
    上午&中午按计划学了李超线段树,照着题解写过了模板题。然后本来打算去做题单里的一道Ynoi紫来练dsuontree,于是边写题解边想,结果写着写着就不会了,发现好像dsuontree不太好做,好像是两只log的。还可能大概会一个单log大常数线段树合并。看题解区发现有跑出dfs序后......
  • 0829-T4 太空帝国
    0829-T4太空帝国题意给定一个图有\(n\)个点,每个点的坐标为\((x_i,y_i,z_i)\)。点\(i\)和点\(j\)的距离为\(\min(|x_i-x_j|,|y_i-y_j|,|z_i-z_j|)\)。求该图的最小生成树。思路暴力建图不能通过。对最小生成树有贡献的边只可能连在按\(x\)或\(y\)或\(z\)排序......