UVAlive 5875 DP
来源:互联网 发布:日语动漫配音软件 编辑:程序博客网 时间:2024/06/11 05:50
题意:给你一堆二维点,每个点有一些分数。
现在要从点(0 , 0 )出发,只能从标号小的点走到大的点,每个人有一个走的距离的限制,问最后能拿到的最高的分数,当然这个人从(0 , 0)出发还得回到( 0 , 0 )。
思路:用dp[i][j]表示在点i分数为j的最短距离,转移方程就是dp[i][j] = min(dp[i][j] , dp[k][j - w[k]] + Map[i][k]) 。
CODE:
#include <set>#include <map>#include <stack>#include <cmath>#include <queue>#include <cstdio>#include <string>#include <vector>#include <iomanip>#include <cstring>#include <iostream>#include <algorithm>#define Max 2505#define FI first#define SE second#define ll __int64#define PI acos(-1.0)#define inf 0x3fffffff#define LL(x) ( x << 1 )#define bug puts("here")#define PII pair<int,int>#define RR(x) ( x << 1 | 1 )#define mp(a,b) make_pair(a,b)#define mem(a,b) memset(a,b,sizeof(a))#define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i )using namespace std;#define N 333ll x[N] , y[N] , w[N] ;int n ;double Map[N][N] ;double dp[N][11111] ;double getD(int i , int j) { return sqrt(1.0 * (x[i] - x[j]) * (x[i] - x[j]) + 1.0 * (y[i] - y[j]) * (y[i] - y[j])) ;}int Asum = 0 ;int main() { int ca = 0 ; while(cin >> n , n ) { Asum = 0 ; for (int i = 1 ; i <= n ; i ++ ) { scanf("%I64d%I64d%I64d",&x[i] ,&y[i],&w[i]) ; Asum += w[i] ; } n ++ ; x[0] = y[0] = x[n] = y[n] = w[0] = w[n] = 0 ; for (int i = 0 ; i <= n ; i ++ ) { for (int j = 0 ; j <= n ; j ++ ) { Map[i][j] = getD(i , j) ; } } string name ; int lim ; printf("Race %d\n",++ca) ; while(cin >> name >> lim) { if(name == "#")break ; for (int i = 0 ; i <= n ; i ++ ) { for (int j = 0 ; j <= Asum ; j ++ )dp[i][j] = inf ; dp[0][0] = 0 ; } for (int i = 1 ; i <= n ; i ++ ) { for (int j = 0 ; j <= Asum ; j ++ ) { for (int k = 0 ; k < i ; k ++ ) { if(w[k] > j)continue ; dp[i][j] = min(dp[i][j] , dp[k][j - w[k]] + Map[k][i]) ; } } } int ans = 0 ; for (int i = 0 ; i <= Asum ; i ++ ) { if(dp[n][i] <= lim)ans = max(ans , i) ; } printf("%s: %d\n",name.c_str() ,ans) ; } } return 0 ;}/*5750 -800 301500 0 50750 750 60-1250 750 70-1000 -500 50Chris 7000Karl 6500Tania 5000# 04500 0 100 500 10-500 0 100 -500 10Hanny 2100Lizzie 1800# 00*/
- UVAlive 5875 DP
- UVALive 4725 Airport 【DP】
- DP->UVALive 4764
- uvalive 3029(dp)
- uvalive 3983(dp)
- UVALive - 3983 Robotruck DP
- UVALive 6801 Sequence (DP)
- uvalive 3942(dp + trie)
- uvalive 4256(dp)
- 【DP】UVALive 6400 Matryoshka
- uvalive 3363(区间dp)
- UVALive 4651(DP)
- UVALive 6462 状压DP
- UVALIVE 3516(DP)
- UVaLive 6697 (DP)
- UVALive 4015 树形dp
- UVALIVE 7505 dp
- UVALive 5097(斜率dp)
- File对文件的操作
- 让C程序更高效--持续完善
- 用户代理行为
- 10324 - Zeros and Ones
- QQ群—取消对某人的屏蔽
- UVAlive 5875 DP
- 细说ASP.NET Windows身份认证
- SIP路由
- http协议学习日记
- SIP可靠性(SIP Reliability)
- 简谈jQuery选择器的第二个参数Context对象以及jQuery对象转换成DOM对象的方法
- 帧差法、光流法、背景减除法
- 自动生成Junit测试类
- 查询能力(SIP OPTIONS)