<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
       
      這是一道很好的訓練dp的題,并且有很多細節需要注意
       
       
      原題如下:
       
       
      饑餓的奶牛
       

      描述

       

      牛在飼料槽前排好了隊。飼料槽依次用1到N(1N2000) 編號。每天晚上,一頭幸運的牛根據約翰的規則,吃其中一些槽里的飼料。

      約翰提供 N個區間的清單。一個區間是一對整數 l,r(1lrN),表示一些連續的飼料槽,比如 1-3,7-8,3?4 等等。牛可以任意選擇區間,但是牛選擇的區間不能有重疊。

      當然,牛希望自己能夠吃得越多越好。給出一些區間,幫助這只牛找一些區間,使它能吃到最多的東西。

      在上面的例子中,1-3 和 3?4 是重疊的;聰明的牛選擇1?37?8 ,這樣可以吃到 5個槽里的東西。

       

      輸入

       

      第一行,整數 N(1N2000)。

      第 2 到 N+1 行,每行兩個整數,表示一個區間,較小的端點在前面。

       

      輸出

       

      僅一個整數,表示最多能吃到多少個槽里的食物。

       

      輸入樣例 1 

      3
      1 3
      7 8
      3 4

      輸出樣例 1

      5
      看完題目,我們會感覺很簡單,但又無從下手。因為這里包含了左邊界和右邊界,所以我們先定義一個結構體。

      struct node
      {
        long long b,c;
      }a[100010];

      然后對它進行排序,或許會有點思路
      sort(a+1,a+1+n);//排序,為之后dp做準備 

      因為這是結構體的排序,所以我們需要自定義一個排序函數

      bool cmp( node x, node y)//自定義排序方法 
      {
          if(x.c!=y.c) return x.c<y.c;
          return x.b<y.b;
      }
      sort(a+1,a+1+n,cmp);//排序,為之后dp做準備

      然后便開始dp

      ans=dp[1]=a[1].c-a[1].b+1;//這有個小細節,就是需+1后結果才正確 
      for(long long i=2;i<=n;i++)
      {
          dp[i]=a[i].c-a[i].b+1;//需+1
          for(long long j=1;j<=i-1;j++)
          {
              if(a[j].c<a[i].b)//如果后一個的左邊界比前一個的右邊界大 
              {
                  dp[i]=max(dp[i],dp[j]+(a[i].c-a[i].b+1));//dp求最大值 ,同樣需+1
              }    
          }
          ans=max(ans,dp[i]);//取最大值 
      }

      于是,代碼便出來了

      #include<bits/stdc++.h>
      using namespace std;
      long long n,ans;
      struct node
      {
          long long b,c;
      }a[100010];
      bool cmp( node x, node y)//自定義排序方法 
      {
          if(x.c!=y.c) return x.c<y.c;
          return x.b<y.b;
      }
      long long dp[100010];
      int main()
      {
          cin>>n; 
          for(long long i=1;i<=n;i++)
          {
              cin>>a[i].b>>a[i].c;
          }
          sort(a+1,a+1+n,cmp);//排序,為之后dp做準備 
          for(long long i=1;i<=n;i++)
          {
              cout<<a[i].b<<' '<<a[i].c<<endl;
          }
          ans=dp[1]=a[1].c-a[1].b+1;//這有個小細節,就是需+1后結果才正確 
          for(long long i=2;i<=n;i++)
          {
              dp[i]=a[i].c-a[i].b+1;
              for(long long j=1;j<=i-1;j++)
              {
                  if(a[j].c<a[i].b)//如果后一個的左邊界比前一個的右邊界大 
                  {
                      dp[i]=max(dp[i],dp[j]+(a[i].c-a[i].b+1));//dp求最大值 
                  }    
              }
              ans=max(ans,dp[i]);//取最大值 
          }
          cout<<ans;
          return 0;
      }

      這是一道很好的dp題,可以使我們對dp的理解更深刻。所以,快去做一做吧!

      
      
      posted on 2020-08-17 20:52  blcym  閱讀(426)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本欧美大码a在线观看| 亚洲乱码日产精品一二三| 国产精品久久久久AV福利动漫| 国产成人a在线观看视频免费| 国产日韩综合av在线| 国产91丝袜在线播放动漫| 四虎成人精品永久网站| 忘忧草在线社区www中国中文| 亚洲国产av剧一区二区三区 | 猫咪AV成人永久网站在线观看 | 884aa四虎影成人精品| 日韩福利视频导航| 日韩欧美国产aⅴ另类| 久久无码高潮喷水| 久久精品国产久精国产果冻传媒 | 国产一区二区三区精品自拍 | A级毛片100部免费看| 国产黄色av一区二区三区| 亚洲欧美激情在线一区| 国产二区三区不卡免费| 好吊妞无缓冲视频观看| 丁香五月天综合缴情网| 99在线精品国自产拍中文字幕| 亚洲精品蜜桃久久久久久 | 内射中出无码护士在线| 无码抽搐高潮喷水流白浆| 午夜精品一区二区三区免费视频| 四虎永久在线精品8848a| 久久天天躁狠狠躁夜夜婷| 佛山市| 国产黄色免费看| 国产精品毛片av999999| 男女激情一区二区三区| 亚洲偷自拍另类一区二区| 亚洲 欧美 清纯 校园 另类| 理论片午午伦夜理片影院99| 国产成人精品午夜福利| 色噜噜狠狠一区二区三区果冻| 做暖暖视频在线看片免费| 大竹县| 中文字幕在线视频不卡一区二区|