poj 1036 Gangsters 简单dp
2016-04-18 14:54
567 查看
//poj 1036 //sep9 //这种dp效率低 会爆内存 #include <iostream> using namespace std; const int MAXT=30012; const int MAXS=112; const int MAXN=112; int n,k,t; int a[MAXT][MAXS]; int dp[MAXT][MAXS]; int x[MAXN],y[MAXN],z[MAXN]; int main() { scanf("%d%d%d",&n,&k,&t); int maxT=0,maxS=0; for(int i=0;i<n;++i){ scanf("%d",&x[i]); maxT=max(maxT,x[i]); } for(int i=0;i<n;++i) scanf("%d",&y[i]); for(int i=0;i<n;++i){ scanf("%d",&z[i]); maxS=max(maxS,z[i]); } memset(a,0,sizeof(a)); memset(dp,-1,sizeof(dp)); for(int i=0;i<n;++i) a[x[i]][z[i]]+=y[i]; dp[0][0]=a[0][0]; for(int time=1;time<=maxT;++time) for(int sta=0;sta<=MAXS;++sta){ if(sta-1>=0&&dp[time-1][sta-1]!=-1) dp[time][sta]=max(dp[time][sta],dp[time-1][sta-1]+a[time][sta]); if(dp[time-1][sta]!=-1) dp[time][sta]=max(dp[time][sta],dp[time-1][sta]+a[time][sta]); if(dp[time-1][sta+1]!=-1) dp[time][sta]=max(dp[time][sta],dp[time-1][sta]+a[time][sta]); } int ans=-1; for(int i=0;i<=MAXS;++i) ans=max(ans,dp[maxT][i]); if(ans==-1) printf("0"); else printf("%d",ans); return 0; } //改变思考问题角度后的新dp AC #include <iostream> #include <algorithm> using namespace std; struct Node { int t,s,v; }g[128]; int n,k,t; int dp[128]; int cmp(Node x,Node y) { return x.t<y.t; } int main() { scanf("%d%d%d",&n,&k,&t); for(int i=1;i<=n;++i) scanf("%d",&g[i].t); for(int i=1;i<=n;++i) scanf("%d",&g[i].v); for(int i=1;i<=n;++i) scanf("%d",&g[i].s); int ans=-1; memset(dp,-1,sizeof(dp)); dp[0]=0; g[0].t=0,g[0].s=0,g[0].v=0; sort(g+1,g+1+n,cmp); for(int i=1;i<=n;++i){ for(int j=0;j<i;++j){ if(dp[j]!=-1&&abs(g[i].s-g[j].s)<=g[i].t-g[j].t) dp[i]=max(dp[i],dp[j]+g[i].v); } ans=max(ans,dp[i]); } printf("%d",ans==-1?0:ans); return 0; }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析