程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj3257(Cow Roller Coaster)DP

poj3257(Cow Roller Coaster)DP

編輯:C++入門知識

題意:要連出一個從1-L的過山車線,給出n段可選的建設方案。每段都有起始位置,終止位置,代價,和樂趣程度。要實現1-L的長度中,相鄰兩端要首尾相連,總建設代價控制在B之內,問最多能獲得多少樂趣程度。


解法:二維dp, num[i][j]記錄恰好建設到i並且用掉代價j多能獲得的最多樂趣。先將每段可選方案按照位置排序,然後進行轉移。最後選max(num[L][i]),i from 0 to B;

代碼:

/****************************************************
* author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

#define eps 1e-8
typedef long long LL;


struct point
{
    int s,e,fun,cost;
} points[10010];
bool operator<(point a,point b)
{
   if(a.s!=b.s)
        return a.sb)
                continue;
                LL &tool=num[points[i].e][j+points[i].cost];
                 tool=max(tool,num[points[i].s-1][j]+points[i].fun);
         }
     }
 }
 LL ans=-1;
 for(int i=0;i<=b;i++)
     ans=max(ans,num[L][i]);
   cout<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved