当前位置: 首页 > news >正文

打卡信奥刷题(2685)用C++实现信奥题 P2998 [USACO10NOV] Candy S

P2998 [USACO10NOV] Candy S

题目描述

FJ 知道贝茜喜欢吃糖果。FJ 有N(1≤N≤40000)N (1 \le N \le 40000)N(1N40000)颗糖果,他想在若干天内将这些糖果送给贝茜。每一天,FJ 会让贝茜从他提供的一个列表中选择她当天想吃多少糖果,该列表有Nopt(1≤Nopt≤50)Nopt(1 \le Nopt \le 50)Nopt(1Nopt50)种不同的选项Ci(1≤Ci≤N)C_i (1 \le C_i \le N)Ci(1CiN)。她必须恰好拿走CiC_iCi颗糖果。

农夫约翰给出了F(1≤F≤50)F(1 \le F \le 50)F(1F50)个他喜欢的数字FNi(1≤FNi≤N)FN_i (1 \le FN_i \le N)FNi(1FNiN)。每当一天结束时,如果剩余的糖果数量恰好等于这些数字之一,贝茜可以选择添加M(1≤M≤100)M(1 \le M \le 100)M1M100)颗糖果。如果添加糖果后又出现了另一个 FJ 喜欢的数字,贝茜可能会再次获得添加MMM颗糖果的机会。在最好的情况下,贝茜可以获得无限多的糖果!

当贝茜无法在列表中选择糖果数量(因为糖果不够)时,她就无法再获得更多糖果。

不幸的是,贝茜不知道该如何规划才能吃掉尽可能多的糖果,所以她需要你的帮助。

举例来说,考虑以下场景:

  • FJ 最初有101010颗糖果
  • 贝茜每天可以选择吃掉333555颗糖果
  • 当剩余的糖果数量是222444时,FJ 会添加111颗糖果

贝茜可以使用以下选择来最大化她能吃掉的糖果数量:

初始糖果数 吃掉糖果数 剩余糖果数 奖励糖果数 最终糖果数 第1103707273415353213433000

输入格式

  • 111行:四个由空格分隔的整数:N,Nopt,F,MN,Nopt,F,MN,Nopt,F,M
  • 222行到第Nopt+1Nopt+1Nopt+1行:第i+1i+1i+1行包含一个整数:CiC_iCi
  • Nopt+2Nopt+2Nopt+2行到第Nopt+F+1Nopt+F+1Nopt+F+1行:第i+Nopt+1i+Nopt+1i+Nopt+1行包含一个整数:FNiFN_iFNi

输出格式

  • 111行:一个整数,表示贝茜能吃掉的最大糖果数量,如果贝茜能吃掉无限多的糖果,则输出-1

输入输出样例 #1

输入 #1

10 2 2 1 3 5 4 2

输出 #1

12

C++实现

#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#definelllonglong#defineinf0x7f7f7f7f#defineN60usingnamespacestd;inlinellread(){ll x=0,f=1;charch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}returnx*f;}intn,nopt,F,m,c[N],f[N],book[40110],dp[40110],cnt[40110],ans;intmain(){n=read(),nopt=read(),F=read(),m=read();for(inti=1;i<=nopt;i++)c[i]=read();for(inti=1;i<=F;i++)book[read()]=1;memset(dp,-1,sizeof(dp));dp[n]=0;book[n]=false;for(inti=n;i;i--){if(dp[i]==-1)continue;if(cnt[i]>F+1)returnprintf("-1\n"),0;if(book[i]){cnt[i]++;if(dp[i]>dp[i+m]){dp[i+m]=dp[i];i+=m+1;}continue;}for(intj=1;j<=nopt;j++){if(i-c[j]<0)continue;dp[i-c[j]]=max(dp[i-c[j]],dp[i]+c[j]);}}for(inti=n;i>=0;i--)ans=max(ans,dp[i]);printf("%d\n",ans);return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.jsqmd.com/news/238743/

相关文章:

  • 【.NET高性能编程必修课】:Span在大规模文件处理中的6大应用场景
  • S7.NET+ 实用指南:3步掌握西门子PLC通信的.NET库
  • CoolProp热物理性质计算终极指南:从零基础到工程应用
  • DroidCam OBS插件:将手机变身高清直播摄像头的终极方案
  • 交错数组读写冲突频发?一文搞懂volatile与锁机制的正确用法
  • Linux OCR工具效率革命:3分钟打造极速启动方案
  • 中文排版神器:Source Han Serif CN开源字体终极应用指南
  • 极简实战:闲置电视盒子深度改造为高性能Linux服务器全攻略
  • NormalMap-Online技术实现原理与应用实践
  • 老年跌倒检测方案:关键点算法云端测试笔记
  • Android Studio中文插件:告别英文困扰,打造高效开发环境
  • 为什么顶级团队都在用主构造函数依赖注入?真相令人震惊
  • AI自动打码案例:新闻图片隐私处理
  • 思源宋体CN实战应用与性能优化全解析
  • 手势识别技术解析:MediaPipe Hands架构与实现
  • 3步搞定Steam资源:智能下载器重塑游戏管理体验
  • AI手势识别为何选CPU?低成本高性能部署案例揭秘
  • 2026毕设ssm+vue教工公寓管理论文+程序
  • Raylib核心技术深度解析:构建现代游戏应用的高效工具链
  • 终极教程:如何将闲置电视盒子改造成高性能Linux服务器
  • 7大核心技术突破:思源宋体CN版企业级部署完全指南
  • 抖音评论数据采集终极指南:3分钟快速获取完整用户反馈
  • 跨平台开发调试难题全解析(断点失效与性能瓶颈大揭秘)
  • 原神抽卡数据深度分析:从新手到专家的进阶指南
  • N_m3u8DL-RE视频下载宝典:新手也能轻松上手
  • 【断点调试终极指南】:从原理到实战,彻底优化多平台断点体验
  • VR视频下载新手指南:3步掌握高清360°全景内容获取技巧
  • 2026毕设ssm+vue教师出差管理系统论文+程序
  • Noto Emoji 完整解决方案:彻底告别表情符号显示难题
  • 手部姿态估计在教育中的应用:MediaPipe Hands实践