• CodeForces 30C Shooting Gallery 简单dp


    版权声明:本文为博主原创文章,未经博主同意不得转载。

    https://blog.csdn.net/qq574857122/article/details/36944227

    题目链接:点击打开链接

    给定n个气球

    以下n行 x y t val 表示气球出现的坐标(x,y) 出现的时刻t。气球的价值val

    枪每秒移动1个单位的距离

    问:

    射击的最大价值。開始时枪瞄准的位置随意。


    思路:

    dp一下。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <set>
    #include <vector>
    #include <map>
    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<bb.t;
    }
    ll dist(node aa, node bb){
    	return (aa.x-bb.x)*(aa.x-bb.x)+(aa.y-bb.y)*(aa.y-bb.y);
    }
    ll dis[N][N];
    double dp[N];
    int main(){
    	ll i,j,u,v;
    	while(cin>>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
    ",ans);
    	}
    	return 0;
    }


  • 相关阅读:
    windows修复移动硬盘文件夹打不来的问题
    secureCRT设置
    core dump配置
    ssh免密登陆的问题解决
    crontab的环境变量
    tmux配置
    shell的技巧笔记
    记一次route配置不起作用的问题解决过程
    crontab笔记
    Python中的一个诡异编码问题的追踪
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10596612.html
Copyright © 2020-2023  润新知