程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CodeForces 30C Shooting Gallery 簡單dp

CodeForces 30C Shooting Gallery 簡單dp

編輯:C++入門知識

題目鏈接:點擊打開鏈接

給定n個氣球

下面n行 x y t val 表示氣球出現的坐標(x,y) 出現的時刻t,氣球的價值val

槍每秒移動1個單位的距離

問:

射擊的最大價值,開始時槍瞄准的位置任意。


思路:

dp一下。。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define ll long long
#define N 2005
ll n;
struct node{
	ll x,y,t;
	double val;
}a[N];
bool cmp(node aa, node bb){
	return aa.t>n){
		for(i = 1; i <= n; i++)
			cin>>a[i].x>>a[i].y>>a[i].t>>a[i].val;
		sort(a + 1, a + 1 + n, cmp);
		for(i = 1; i <= n; i++) {
			for(j = i+1; j <= n; j++)
				dis[i][j] = dis[j][i] = dist(a[i],a[j]);
		}
		for(i = 1; i <= n; i++) {
			dp[i] = a[i].val;
			for(j = 1; j < i; j++) {
				if(dis[i][j] > ((a[i].t-a[j].t)*(a[i].t-a[j].t)))
					continue;
				dp[i] = max(dp[i], dp[j]+a[i].val);			
			}
		}
		double ans = 0;
		for(i = 1; i <= n; i++)
			ans = max(ans, dp[i]);
		printf("%.10lf\n",ans);
	}
	return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved