news 2026/7/7 18:23:26

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 3:22:07

手势识别在零售中的应用:MediaPipe Hands案例分析

手势识别在零售中的应用&#xff1a;MediaPipe Hands案例分析 1. 引言&#xff1a;AI 手势识别与追踪的技术演进 随着人工智能和计算机视觉技术的快速发展&#xff0c;手势识别正逐步从实验室走向真实商业场景。尤其在零售行业&#xff0c;消费者行为分析、无接触交互、智能导…

作者头像 李华
网站建设 2026/7/6 7:15:23

MetaboAnalystR安装指南:7步搞定代谢组学分析环境搭建

MetaboAnalystR安装指南&#xff1a;7步搞定代谢组学分析环境搭建 【免费下载链接】MetaboAnalystR R package for MetaboAnalyst 项目地址: https://gitcode.com/gh_mirrors/me/MetaboAnalystR 还在为MetaboAnalystR的复杂安装过程头疼吗&#xff1f;作为功能强大的代谢…

作者头像 李华
网站建设 2026/6/26 4:20:05

GanttProject 3.3:企业级项目管理解决方案的5大核心优势

GanttProject 3.3&#xff1a;企业级项目管理解决方案的5大核心优势 【免费下载链接】ganttproject Official GanttProject repository 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 在数字化转型加速的今天&#xff0c;高效的项目管理工具已成为企业竞争…

作者头像 李华
网站建设 2026/6/30 23:18:00

如何提升手势识别准确率?MediaPipe参数详解教程

如何提升手势识别准确率&#xff1f;MediaPipe参数详解教程 1. 引言&#xff1a;AI 手势识别与追踪的现实挑战 随着人机交互技术的发展&#xff0c;手势识别正逐步成为智能设备、虚拟现实、增强现实和智能家居等场景中的核心感知能力。传统的触摸或语音交互方式在特定环境下存…

作者头像 李华
网站建设 2026/6/28 21:14:56

S7.NET+终极实战指南:从零到精通的西门子PLC通信方案

S7.NET终极实战指南&#xff1a;从零到精通的西门子PLC通信方案 【免费下载链接】s7netplus S7.NET -- A .NET library to connect to Siemens Step7 devices 项目地址: https://gitcode.com/gh_mirrors/s7/s7netplus 还在为西门子PLC通信开发头疼吗&#xff1f;S7.NET这…

作者头像 李华