Hatena::ブログ(Diary)

komiyamの日記

2012-02-24

POJ-3616 : Milking Time

問題概要

重み付き区間スケジューリング問題。

解法

DP。

acceptされたコード

座標圧縮したらもっと速くなるのは知ってる。座標圧縮しないとき、g++だとTLEしたけどc++だと通った。

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

const int MAX_N = (int)(1e6);

int N, M, R;
vector< pair<int,int> > rs[MAX_N];
bool on[MAX_N];
int dp[MAX_N + 1];

void init(){
	scanf("%d%d%d", &N, &M, &R);
	for(int i=0; i<M; i++){
		int x, y, z;
		scanf("%d%d%d", &x, &y, &z);
		rs[x].push_back(make_pair(min(y+R, N), z));
		on[x] = true;
	}
}

int solve(){
	for(int i=0; i<N; i++){
		dp[i+1] = max(dp[i+1], dp[i]);
		if(on[i]){
			for(int j=0; j<(int)rs[i].size(); j++){
				dp[rs[i][j].first] = max(dp[rs[i][j].first], dp[i] + rs[i][j].second);
			}
		}
	}

	return dp[N];
}

int main(){
	init();
	printf("%d\n", solve());

	return 0;
}

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/komiyam/20120224/1330010610
Connection: close