神仙爱采药
发布日期:2021-05-07 23:11:25 浏览次数:21 分类:精选文章

本文共 773 字,大约阅读时间需要 2 分钟。

题目描述:

一个背包体积为V,给出一个字符串s,设长度为n。

则s[i]表示第i天的物品体积,为1或2。
第i天可以选择是否将物品i放入背包,若背包容量不够可以先
从中拿出若干物品。
每天结束前在背包中的每个物品会产生一个药丸。
问n天结束后,最多有多少药丸。
在这里插入图片描述

样例

在这里插入图片描述

对于第四组样例

第一天装入了体积为2的药,该天生产药丸数为1。

第二天装入了体积为1的药,该天生产药丸数为2。

第三天取出了体积为2的药,装入了体积为1的药,该天生产药丸数为2。

第四天未操作,生产药丸数为2。

第五天装入体积为1的药,该天生产药丸数为3

故 1+2+2+2+3=10 个

声明

  • ans结果(最大)
  • cnt1:体积为1的数量
  • cnt2:体积为2的数量
  • v:背包的体积
  • n:字符串的长度
  • char s[101111]:字符串

main

  • cin>>v>>s;
  • n=strlen(s)
  • 遍历字符串
  • 如果s[i]==‘2’能放就放(因为是字符串,所以’2’)
    在这里插入图片描述
  • 如果s[i]=='1’还是能放就放,放不下(也就是满了)看看里面有没有体积为2的药材,如果有cnt2–,cnt1++,因为这样可以腾出一个体积

在这里插入图片描述

在这里插入图片描述

  • 一天产的药丸
    在这里插入图片描述
  • 最后输出

代码

#include 
using namespace std;long long ans,cnt1,cnt2,v,n;char s[101111];int main(){ cin>>v>>s; n=strlen(s); for(int i=0;i
0)cnt1++,cnt2--; } ans+=cnt1+cnt2; } cout <
<< endl; return 0;}

victory

在这里插入图片描述

上一篇:使用map传递参数
下一篇:keil模块化编程

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月14日 09时57分48秒