[动态规划]POJ3616(dp入门题)

来源:互联网 发布:西安java开发工资 编辑:程序博客网 时间:2024/06/06 13:19
/*Name:POJ3616 (DP入门)Actor:HTTime:2015年10月13日Error Reporte:1.好好想清楚dp思路...要先会写出明确的dp式子,再理清楚各种条件*/#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>#include <vector>#include <stack>#define N 1010using namespace std;//http://vj.acmclub.cn/problem/viewProblem.action?id=16864int dp[N];struct obj{int pret;int aft;int val;}ob[N];int m, r;int ans;bool cmp(obj a, obj b){if (a.pret < b.pret) return true;if (a.pret == b.pret && a.aft < b.aft) return true;return false;}int main(){int t, i, j, k;int temp,n;while (scanf("%d %d %d", &n, &m, &r) != EOF){for (i = 0; i < m; i++){scanf("%d %d %d", &ob[i].pret, &ob[i].aft, &ob[i].val);}sort(ob, ob + m, cmp);ans = 0;for (i = 0; i < m; i++){dp[i] = ob[i].val;}for (i = 0; i < m; i++){for (j = 0; j < i; j++){if (ob[i].pret >= ob[j].aft + r)dp[i] = (dp[i] >= dp[j] + ob[i].val ? dp[i] : dp[j] + ob[i].val);ans = ans>=dp[i] ? ans:dp[i];//bug点 }}printf("%d\n", ans);}return 0;}//dp[i] = 到第i次之前,如果取这一次,可能的最大量值//dp[i] = max{dp[i],dp[j]+val[i]}遍历所有可能允许拿这一次的情况   (1+...+1000)

0 0
原创粉丝点击