日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1939:【07NOIP普及组】纪念品分组 | P1094 [NOIP2007 普及组] 纪念品分组

發布時間:2025/3/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1939:【07NOIP普及组】纪念品分组 | P1094 [NOIP2007 普及组] 纪念品分组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目鏈接】

ybt 1939:【07NOIP普及組】紀念品分組
洛谷 P1094 [NOIP2007 普及組] 紀念品分組

【題目考點】

1. 貪心

【解題思路】

貪心選擇:選擇價格最小的和最大的紀念品分成一組,若價格最小的和最大的紀念品無法
分成一組,那么價格最大的紀念品單獨一組。

將問題抽象為:有n個數字,要湊成加和小于等于w的組,一組可以有2個數或1個數,最少可以湊多少組。

1. 貪心選擇性質的證明:

貪心選擇:
如果最大值加最小值大于w,那么最大值單獨一組。
如果最大值加最小值小于等于w,最大最小值湊成一組。

  • 證明:存在最優解包含第一次貪心選擇
  • 如果第一次選擇的組只有最大值,由于最大值無法和其他數字湊成一組,最大值單獨一組是唯一的選擇。
    如果第一次的貪心選擇是最大最小值構成的一組。設最大值為lll,最小值為ggg,那么一定有:l+g≤wl+g\le wl+gw
    假設對于所有最優解,都不包含第一次的貪心選擇,也就是說lllggg不會分為一組。
    lll可以有以下幾種情況

  • lll單獨一組:無論ggg與另一個數字一組,還是ggg單獨一組,都可以讓ggg更改為與lll一組。
  • lll與另一個數字xxx一組,那么有l+x≤wl+x\le wl+xw
    假設此時ggg單獨一組,那么可以讓gggxxx交換,得到lllggg一組。
    假設此時ggg與另一個數字hhh一組,那么有h+g≤wh+g\le wh+gw
    由于lll是當時的最大值,那么一定有h≤lh\le lhl,所以有h+x≤l+x≤wh+x\le l+x\le wh+xl+xwhhhxxx一組加和并不會超過www。 將gggxxx交換,lllggg一組,hhhxxx一組,是可行的。
    無論什么情況,都可以通過交換使得lllggg一組,這樣做分組數量不會增加,該方案仍然是最優解,最優解中包含了貪心選擇,與假設相悖,原命題得證。
  • 證明:進行k次貪心選擇后,存在最優解包含第k+1次的貪心選擇。
  • 證明方法與證明第1點相似,不再贅述。

    2.具體做法:

    對所有紀念品按升序排序,設l,r兩個指針指向當前看到的價格最小和最大的紀念品。

    • 如果第l和第r個紀念品的價格加和大于w,那么第l紀念品單獨一組,l加1。
    • 如果第l和第r個紀念品的價格加和小于等于w,那么第l和第r紀念品分為一組,l和r都加1。

    【題解代碼】

    解法1:貪心

    #include<bits/stdc++.h> using namespace std; #define N 30005 int main() {int p[N], w, n, ct = 0;//ct:組數cin >> w >> n;for(int i = 1; i <= n; ++i)cin >> p[i];sort(p+1, p+1+n);int l = 1, r = n;while(l <= r){if(l != r && p[l] + p[r] <= w){l++;r--;ct++;//l, r湊一組}else{r--;ct++;//r自己湊一組 }}cout << ct;return 0; }

    總結

    以上是生活随笔為你收集整理的信息学奥赛一本通 1939:【07NOIP普及组】纪念品分组 | P1094 [NOIP2007 普及组] 纪念品分组的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。