POJ - 3257 Cow Roller Coaster (背包)
题目大意:要用N种材料建一条长为L的路,如今给出每种材料的长度w。起始地点x。发费c和耐久度f
问:在预算为B的情况下,建好这条路的最大耐久度是多少
解题思路:背包问题
dp[i][j]表示起始地点为i。发费为j的最大耐久度
可得转移方程
dp[i + w][j + c] = max(dp[i + w][j + c],dp[i][j] + f)
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxl 1010 #define maxn 10010 #define INF 0x3f3f3f3f int L, N, B; int dp[maxl][maxl]; struct component { int x, w, f, c; }com[maxn]; int cmp(const component a, const component b) { return a.x < b.x; } void init() { for(int i = ; i < N; i++) scanf("%d%d%d%d", &com[i].x, &com[i].w, &com[i].f, &com[i].c); sort(com, com + N, cmp); } void solve() { memset(dp, -, sizeof(dp)); dp[][] = ; for(int i = ; i < N; i++) { for(int j = ; j <= B - com[i].c; j++) if(dp[com[i].x][j] != -) { dp[com[i].x + com[i].w][j + com[i].c] = max(dp[com[i].x + com[i].w][j + com[i].c], dp[com[i].x][j] + com[i].f) ; } } int ans = -; for(int i = ; i <= B; i++) if(dp[L][i] != INF) ans = max(ans, dp[L][i]); printf("%d\n", ans); } int main() { while(scanf("%d%d%d", &L, &N, &B) != EOF ) { init(); solve(); } return ; }
相关推荐
VanTYS 2019-12-15
数据与算法之美 2014-05-29
ustbfym 2019-11-04
lixiaotao 2019-10-28
ustbfym 2019-10-21
duyifei0 2019-06-28
MachineIntellect 2011-08-28
算法魔功 2018-08-31
程序员生涯 2018-11-08
数据与算法之美 2017-11-27
Wearabledevice 2018-08-26
fengaid 2019-03-18
yhguo00 2017-11-27
卷卷萌 2017-09-02
PHP100 2019-03-28
PHP100 2019-03-28
PHP100 2019-03-28
人生补习班 2018-05-14