首页 > 其他分享 >大一下集训队选拔赛

大一下集训队选拔赛

时间:2024-06-11 18:54:42浏览次数:13  
标签:集训队 int 一下 exgcd 瓶子 选拔赛 max dp define

rank2 还需努力

7 paoxiaomo不爱DP
很简单的一道DP 赛时看错数据范围导致陷入思考误区
其实只用求每个前缀和对应的答案 然后往后合并区间
一但有区间和等于pre[i]那么将该区间加入 并且计算贡献
如果区间和大于pre[i]那么该答案不符合

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pb push_back
#define pii pair<int,int>
using namespace std;
const int mod=998244353;
void exgcd(int a,int b,int &x,int &y){if(b==0){x=1,y=0;return;}exgcd(b,a%b,y,x);y-=a/b*x;}
struct node{
    int l,r,i,ans;
};
bool cmp(node a,node b){
    return a.ans<b.ans;
}
void solve() {
    int n;cin>>n;
    vector<int>a(n+1),b(n+1),pre(n+1,0);
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++)cin>>b[i];
    for(int i=1;i<=n;i++)pre[i]=pre[i-1]+a[i];
    int mx=-1;
    for(int i=1;i<=n;i++){
        int ans=0,sum=0,len=0;
        sum+=b[i];
        for(int k=i+1;k<=n;k++){
            ans+=a[k];len++;
            if(ans==pre[i])sum+=b[len],len=0,ans=0;
            else if(ans>pre[i])break;
        }
        if(ans==0)mx=max(mx,sum);
    }
    cout<<mx<<'\n';
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
    int _=1;
//    cin>>_;
    while(_--)solve();
}

12 鲨鲨喝果汁
因为Ai>Bi
那么他的范围符合递减
题目的意思是寻找空瓶子能整合成的最大贡献
那么我们通过简单的思考可以得出以下式子
dp[j]=max{dp[j-Ai]+BiCi,dp[j]}
很可惜该式子是错误的
因为我们寻找贡献时缺少思考了 如果把改瓶子兑换为另外一个瓶子时
我们可以把瓶子里的水喝完再继续兑换
那么我们推出以下式子
dp[j]=max{dp[j-Ai+Bi]+Bi
Ci,dp[j]}
看起来很对而且答案也是对的
但是 你可以提交试试 WA
这是为什么呢?
我们再次仔细阅读题目
0号瓶子或者 i 号瓶子
所以说 每个瓶子 他能进行的兑换只能对于自己进行
那么我们进行二维dp
dp[i][j]=max({dp[i][j],dp[i][j-a[i]+b[i]]+b[i]*c[i]})
这时就对了

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pb push_back
#define pii pair<int,int>
using namespace std;
const int mod=998244353;
void exgcd(int a,int b,int &x,int &y){if(b==0){x=1,y=0;return;}exgcd(b,a%b,y,x);y-=a/b*x;}
int dp[5050][5050];
void solve() {
    int n,m;cin>>n>>m;
    vector<int>a(n+1),b(n+1),c(n+1);
    for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>c[i];
    for(int j=1;j<=m;j++){
        int mx=0;
        for(int i=1;i<=n;i++){
            if(j>=a[i])dp[i][j]=max({dp[i][j],dp[i][j-a[i]+b[i]]+b[i]*c[i]});
            mx=max(mx,dp[i][j]);
        }
        cout<<mx<<'\n';
    }
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
    int _=1;
//    cin>>_;
    while(_--)solve();
}

标签:集训队,int,一下,exgcd,瓶子,选拔赛,max,dp,define
From: https://www.cnblogs.com/archer233/p/18242574

相关文章

  • [chisel]马上要火的硬件语言,快来了解一下优缺点
    Chisel是什么?Chisel的全称为ConstructingHardwareInaScalaEmbeddedLanguage,是一个基于Scala的DSL(DomainSpecificLanguage,特定领域专用语言)。2012年,加州大学伯克利分校(UCBerkeley)的JonathanBachrach等人在计算机体系结构会议DAC(DesignAutomationConference)上发表......
  • 简单介绍一下vim
    简单介绍一下vim一、vim是什么?二、vim的优点三、vi/vim的使用命令模式输入模式底线命令模式四、vi/vim按键说明(一)命令模式可用的光标移动、复制粘贴、搜索替换等移动光标的方法:搜索替换的方法删除、复制与贴上的方法(二)一般模式切换到编辑模式的可用的按钮说明(三)一般......
  • Python编程学习第一篇——制作一个小游戏休闲一下
    到上期结束,我们已经学习了Python语言的基本数据结构,除了数值型没有介绍,数值型用的非常广,但也是最容易理解的,将在未来的学习中带大家直接接触和学习掌握。后续我们会开始学习这门语言的一些基础语法和编程技巧,在这之前我们休闲一下,写一个小游戏娱乐一下。小戏用到了Python内置......
  • 【比赛】高一下期末
    T1月下“毛景树”100Pts题面树链剖分板子,边权转点权。由于这题要支持区间修改和区间覆盖两个操作,所以要开两个lazy标记,注意覆盖的优先级要比增加高,所以更新覆盖的标记时要把增加的清零,pushdown时要按照先覆盖后增加的顺序进行。点击查看代码#include<bits/stdc++.h......
  • 各家AI大胆帮我预测一下2024年全国高考语文作文 并模拟出题 坐看AI算的准不准
    chatgpt-4o抱歉,我无法预测具体的高考题目。不过,我可以根据近年的趋势和主题为你模拟一个可能的作文题目:2024年全国高考语文作文模拟题目:题目:《共同的家园》要求:以“共同的家园”为主题,写一篇文章。可以采用记叙、议论、描写等文体,自选角度。不少于800字。背景提示:在......
  • >>>0是一个位操作符,具体解释一下,并给出几个使用示例和常见场景
    >>>是JavaScript中的无符号右移位运算符。它将操作数的所有位向右移动指定位数,丢弃被移出的位,并在左侧填充零。特别地,>>>0是一个常用的技巧,用于确保任何数字(包括负数)都被转换为无符号的32位整数。这意味着结果总是非负的,并且范围在0到2^32-1之间。具体解释符号位处理:在二进......
  • [记录一下]BufDataSet排序的时候多列同时排序会出问题
    有和网友(不好意思,忘了是那位了)交流中,他反馈BufDataSet多列排序时得到的结果不符合预期,他也给出修复方法,以下是他的验证及修复方法:环境:fpc3.3.1问题复现步骤:SQLQuery1.IndexFieldNames:='cl;c2DESC';这个应该是c1列升序,c2列降序,但是实际是c1,c2列都降序了影响到SQLQuery,BufDataS......
  • 【前端每日基础】day42——关于 Vuex 共有几个属性,哪里可以书写同步任务,哪里可以书写
    Vuex是Vue.js的一个状态管理模式,它集中式地存储和管理应用的所有组件的状态。Vuex提供了以下几个核心属性,每个属性在状态管理中有不同的用途:Vuex共有的几个属性:State:用于存储应用的状态。可以通过this.$store.state或在组件中通过mapState辅助函数访问。Gette......
  • Java面试题:解释一下Java中的synchronized关键字,它是如何保证线程安全的?
    在Java中,synchronized关键字是一种同步锁机制,用于确保多个线程在访问共享资源时能够保持线程安全。线程安全是指在多线程环境下,当多个线程尝试同时访问共享资源时,任何时刻最多只有一个线程能够执行特定的代码段。synchronized关键字可以用于以下几个方面:方法同步:当synch......
  • 南昌航空大学大一下学期java题目集4-6总结性Blog-苏礼顺23201608
    一、前言——总结三次题目集的知识点、题量、难度等情况 关于知识点  这次的三次题目集更加进一步体现了面向对象程序设计的思想方法。主要是之前的三次题目集就只是利用了面向对象三大基础特性中的封装特性,而这三次的题目集增加了继承与多态,这正是面向对象设计的精髓所......