uva 672 Gangsters
来源:互联网 发布:淘宝假货可以不退货吗 编辑:程序博客网 时间:2024/05/16 04:33
题意:就是有N个人,有一个P值和一个S值,然后商店有一个K值,当这个人来的时候如果K和S相等,则进去,则总P加上该人的P值,每秒K可以+1或者-1或者不变。
思路:先按时间排序。d[i]表示第i个人进来总P值最大是多少。则d[i] = max(d[j], d[j]+p[i]) (t[i]-t[j] >= abs(S[i]-S[j])) ,这里要注意的就是初始化一开始所有人设为-1,d[0]=0;如果有的人不能到的话是不能更新后面的值的,不然的话初始化直接为0的话。
则比如:
T 2 3
S 3 4
如果直接为0的话,d[1]就可以更新d[2],但实际情况是不行的。
#include<cstdio>#include<cstring>#include<algorithm>#define mem(name,value) memset(name,value,sizeof(name))#define FOR(i,n) for(int i=1;i<=n;i++)using namespace std;const int maxn = 100+10;struct People{ int t,p,s; bool operator < (const People& rhs)const{ return t < rhs.t; }}p[maxn];int d[maxn];int main(){ int T,n,k,t; scanf("%d",&T); while(T--){ mem(d,-1); d[0] = 0; scanf("%d%d%d",&n,&k,&t); p[0] = (People){0,0,0}; FOR(i,n) scanf("%d",&p[i].t); FOR(i,n) scanf("%d",&p[i].p); FOR(i,n) scanf("%d",&p[i].s); sort(p+1,p+1+n); for(int i=1;i<=n;i++){ for(int j=i-1;j>=0;j--){ if(d[j]==-1) continue; if(p[i].t-p[j].t >= abs(p[i].s-p[j].s)) d[i] = max(d[i],d[j]+p[i].p); } } int ans = 0; for(int i=1;i<=n;i++) ans = max(ans,d[i]); printf("%d\n",ans); if(T) printf("\n"); } return 0;}
0 0
- uva 672 Gangsters( dp )
- UVA 672 Gangsters
- UVA 672 - Gangsters(dp)
- uva 672 - Gangsters(dp)
- uva 672 Gangsters
- UVA - 672 Gangsters(简单dp,正解应该先离散化)
- poj1036 Gangsters
- poj1036 Gangsters
- POJ1036 Gangsters
- pku1036 Gangsters (动态规划)
- POJ1036 Gangsters(DP)
- POJ1036 Gangsters DP
- poj 1036 Gangsters
- poj 1036 Gangsters
- poj 1036 Gangsters
- POJ 1036 Gangsters
- POJ 1036 Gangsters
- POJ 1036 Gangsters (DP)
- 支持5G WLAN的著名品牌手机和平板产品
- ps aux指令詳解
- 【SzNOI语法百题】【d035】猜年龄和出生月份
- 逆序的三位数
- 图片切割工具类
- uva 672 Gangsters
- 【BZOJ】【P3043】【IncDec Sequence】【题解】【差分】
- 坦克大战源码
- Android开发者指南(9) —— ProGuard
- LVS负载均衡测试
- vim配置文件
- 【SzNOI语法百题】【d036】四渠注水from九章算术
- 时间换算
- 商品信息管理系统