Poj 1036 题解
来源:互联网 发布:淘宝网妈妈冬装 编辑:程序博客网 时间:2024/05/01 03:46
一道dp题。
一开始看起来蒙了,但是其实很简单。
他的门是可以不动的。
也就是说你这个小偷到上一个小偷的这段时间如果大于两者fat的差的话绝对值就必定满足。
之后就是dp了
你每一个小偷都继承这上一个来枚举即可,f[i]表示第i个小偷能偷到的荣誉。
其实就是继承的时候判断一下继承的上一个是否合法即可
Code:
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>using namespace std;struct node{ int ti,val,fat;}hum[110];int n,big,ti;bool Cmp(node x,node y){return x.ti<y.ti;}void Input(){ scanf("%d%d%d",&n,&big,&ti); for(int i=1;i<=n;i++) scanf("%d",&hum[i].ti); for(int i=1;i<=n;i++) scanf("%d",&hum[i].val); for(int i=1;i<=n;i++) scanf("%d",&hum[i].fat); sort(hum+1,hum+n+1,Cmp);}int f[110];int maxx=0;void Solve(){ for(int i=1;i<=n;i++) { f[i]=-1;if(hum[i].ti<hum[i].fat) continue;if(hum[i].fat>big) continue;f[i]=0; for(int j=1;j<i;j++) if(((hum[i].ti-hum[j].ti)>=abs(hum[j].fat-hum[i].fat))) f[i]=max(f[i],f[j]); if(f[i]>=0) f[i]+=hum[i].val;maxx=max(maxx,f[i]); }}void Output(){ printf("%d\n",maxx);}int main(){ //freopen("a.in","r",stdin); //freopen("a.out","w",stdout); Input(); Solve(); Output(); return 0;}
0 0
- POJ 1036 Gangsters 题解
- Poj 1036 题解
- POJ 1011 题解
- poj-1050 题解
- poj-1088题解
- poj-1159题解
- POJ 1009题解
- POJ 1458题解
- Poj 2352 Stars 题解
- POJ 2739题解---小菜
- POJ 1753题解
- POJ 1328题解
- POJ 2049题解
- poj 2679题解
- poj 1149题解
- poj 2790迷宫题解
- POJ - Counterfeit Dollar 题解
- poj 2318 TOY题解
- duilib 修复CTreeViewUI复选功能判断不准确的bug
- hrbust1546 基础数据结构——单链表(1)
- jquery获得select option的值 和对select option的操作
- Java:Resource leak: 'a' is never closed怎么处理?
- 【bzoj 3004】: 吊灯
- Poj 1036 题解
- git 删除远程分支
- CreateThread WaitForMultipleObjects
- IDisposable详解
- NASA望远镜拍摄太阳表面高能X射线爆发瞬间
- Java Web 必备知识笔记
- SVN 如何提交 SO 库文件
- Leetcode subsets2
- android知识点:Activity的生命周期