【BZOJ】1649: [Usaco2006 Dec]Cow Roller Coaster(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1649
又是題解。。。
設f[i][j]表示費用i長度j得到的最大樂趣
f[i][end[a]]=max{f[i-cost[a][begin[a]]+w[a]} 當f[i-cost[a][begin[a]]可行時
初始化f=-1
f[0][0]=0
#include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #include <queue> using namespace std; #define rep(i, n) for(int i=0; i<(n); ++i) #define for1(i,a,n) for(int i=(a);i<=(n);++i) #define for2(i,a,n) for(int i=(a);i<(n);++i) #define for3(i,a,n) for(int i=(a);i>=(n);--i) #define for4(i,a,n) for(int i=(a);i>(n);--i) #define CC(i,a) memset(i,a,sizeof(i)) #define read(a) a=getint() #define print(a) printf("%d", a) #define dbg(x) cout << #x << " = " << x << endl #define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; } inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; } inline const int max(const int &a, const int &b) { return a>b?a:b; } inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=10005, M=1005; struct dat { int x, w, f, c; } a[N]; inline const bool cmp(const dat &a, const dat &b) { return a.x<b.x; } int f[M][M], n, l, m; int main() {read(l); read(n); read(m);for1(i, 1, n) read(a[i].x), read(a[i].w), read(a[i].f), read(a[i].c);sort(a+1, a+1+n, cmp);int ans=-1;CC(f, -1); f[0][0]=0;for1(i, 1, n) {int x=a[i].x, c=a[i].c, e=x+a[i].w, ff=a[i].f;for1(j, c, m) if(f[j-c][x]!=-1) f[j][e]=max(f[j][e], f[j-c][x]+ff);}for1(i, 1, m) ans=max(f[i][l], ans);print(ans);return 0; }?
?
?
Description
The cows are building a roller coaster! They want your help to design as fun a roller coaster as possible, while keeping to the budget. The roller coaster will be built on a long linear stretch of land of length L (1 <= L <= 1,000). The roller coaster comprises a collection of some of the N (1 <= N <= 10,000) different interchangable components. Each component i has a fixed length Wi (1 <= Wi <= L). Due to varying terrain, each component i can be only built starting at location Xi (0 <= Xi <= L-Wi). The cows want to string together various roller coaster components starting at 0 and ending at L so that the end of each component (except the last) is the start of the next component. Each component i has a "fun rating" Fi (1 <= Fi <= 1,000,000) and a cost Ci (1 <= Ci <= 1000). The total fun of the roller coster is the sum of the fun from each component used; the total cost is likewise the sum of the costs of each component used. The cows' total budget is B (1 <= B <= 1000). Help the cows determine the most fun roller coaster that they can build with their budget.
奶牛們正打算造一條過山車軌道.她們希望你幫忙,找出最有趣,但又符合預算 的方案.??過山車的軌道由若干鋼軌首尾相連,由x=0處一直延伸到X=L(1≤L≤1000)處.現有N(1≤N≤10000)根鋼軌,每根鋼軌的起點 Xi(0≤Xi≤L-?Wi),長度wi(l≤Wi≤L),有趣指數Fi(1≤Fi≤1000000),成本Ci(l≤Ci≤1000)均己知.請確定一 種最優方案,使得選用的鋼軌的有趣指數之和最大,同時成本之和不超過B(1≤B≤1000).Input
* Line 1: Three space-separated integers: L, N and B.
?* Lines 2..N+1: Line i+1 contains four space-separated integers, respectively: Xi, Wi, Fi, and Ci.
第1行輸入L,N,B,接下來N行,每行四個整數Xi,wi,Fi,Ci.Output
* Line 1: A single integer that is the maximum fun value that a roller-coaster can have while staying within the budget and meeting all the other constraints. If it is not possible to build a roller-coaster within budget, output -1.
Sample Input
5 6 100 2 20 6
2 3 5 6
0 1 2 1
1 1 1 3
1 2 5 4
3 2 10 2
Sample Output
17選用第3條,第5條和第6條鋼軌
HINT
Source
Silver
總結
以上是生活随笔為你收集整理的【BZOJ】1649: [Usaco2006 Dec]Cow Roller Coaster(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到两只鸟怎么也不飞走
- 下一篇: EasyUI,二级页面内容的操作