poj3616

来源:互联网 发布:如何加强网络信息安全 编辑:程序博客网 时间:2024/05/20 01:34


https://vjudge.net/problem/16276/origin


题意: 给一些区间,然后去区间权和的最大值,注意每个区间取完之后需要休息:


#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int maxn = 1000 + 10;#define INF 0x3f3f3f3f#define eps 10e-8//const int maxn = 1000 + 10;int n,m,k;struct Node{int x;int y;int val;}a[maxn];bool cmp(Node x,Node y){if(x.x == y.x)return x.y < y.y;return x.x < y.x;}int main(){while( ~ scanf("%d%d%d",&n,&m,&k)){for(int i = 1; i <= m; i++){scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].val);}sort(a + 1,a + m + 1,cmp);int dp[maxn] = {0};for(int i = 1; i <= m; i++){for(int j = m; j >= i + 1; j --){if(a[j].x >= a[i].y + k){dp[j] = max(dp[j],dp[i]  + a[i].val);  }}}int ans = 0;for(int i = 1; i <= m; i ++){dp[i] += a[i].val;if(dp[i] > ans)ans = dp[i];}cout << ans << endl;}return 0;}


0 0
原创粉丝点击