NC25099. [USACO 2006 Dec S]Cow Roller Coaster
描述
输入描述
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.
输出描述
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.
示例1
输入:
5 6 10 0 2 20 6 2 3 5 6 0 1 2 1 1 1 1 3 1 2 5 4 3 2 10 2
输出:
17
说明:
Taking the 3rd, 5th and 6th components gives a connected roller-coaster with fun value 17 and cost 7. Taking the first two components would give a more fun roller-coaster (25) but would be over budget.C++11(clang++ 3.9) 解法, 执行用时: 27ms, 内存消耗: 4460K, 提交时间: 2019-07-04 11:26:54
#include<bits/stdc++.h> using namespace std; struct ljy{ int a,b,c,d; }f[10010]; int dp[1010][1010]; bool operator <(const ljy &x,const ljy &y){ return x.a<y.a; } int main(){ int l,n,m; cin>>l>>n>>m; for(int i=1;i<=n;i++){ int b; cin>>f[i].a>>b>>f[i].c>>f[i].d; f[i].b=f[i].a+b; } sort(f+1,f+n+1); memset(dp,-1,sizeof(dp)); dp[0][0]=0; for(int i=1;i<=n;i++) for(int j=m;j>=f[i].d;j--) if(dp[f[i].a][j-f[i].d]>=0)dp[f[i].b][j]=max(dp[f[i].b][j],dp[f[i].a][j-f[i].d]+f[i].c); int ans=-1; for(int i=1;i<=m;i++) ans=max(ans,dp[l][i]); cout<<ans<<"\n"; return 0; }