社区讨论

很多题解没有处理只剩一个纪念品的边界情况

P1094[NOIP 2007 普及组] 纪念品分组参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m5jq5wuv
此快照首次捕获于
2025/01/05 22:45
去年
此快照最后确认于
2025/11/04 11:55
4 个月前
查看原帖
题解里排序后双指针的做法的代码
CPP
    while(l<=r)//一定要有等号。
    {
        if(a[l]+a[r]<=W)   //一定要有等号。
          l++,r--,ans++;
        else
          r--,ans++;   //贪心过程
    }
应该改成
CPP
    while(l<=r)//一定要有等号。
    {
        if(l==r) {
          ans++;
          break;
        }
        if(a[l]+a[r]<=W)   //一定要有等号。
          l++,r--,ans++;
        else
          r--,ans++;   //贪心过程
    }
判断只剩一个纪念品的边界情况,因为一个纪念品不能复制一个装成一组
在这道题里这个代码不判断边界情况其实对结果没有任何影响,都是ans++,算是歪打正着了。不过逻辑不对,换一道题可能就错了

回复

2 条回复,欢迎继续交流。

正在加载回复...