POJ 2385 Apple Catching
2015-08-26 10:44
274 查看
POJ 2385 Apple Catching
大意:牛吃苹果,有两个苹果树,过T分钟,每分钟会有一个苹果树掉苹果,牛可以移动W次,牛开始站在苹果树1下,求T分钟过后牛最多能吃多少个苹果?
DP[i+1][m][z+1]:牛在第i+1分钟时经过m次移动到第z+1树下时吃到的最大苹果树。要根据题目的具体情况对DP数组进行适当设置。
大意:牛吃苹果,有两个苹果树,过T分钟,每分钟会有一个苹果树掉苹果,牛可以移动W次,牛开始站在苹果树1下,求T分钟过后牛最多能吃多少个苹果?
DP[i+1][m][z+1]:牛在第i+1分钟时经过m次移动到第z+1树下时吃到的最大苹果树。要根据题目的具体情况对DP数组进行适当设置。
#include<iostream> #include<algorithm> using namespace std; //对数组的适当扩充,防止溢出 int dp[1005][35][2]; int tree[1005]; int move(const int& a) { return (a==0?1:0); } int main() { int T,W; cin>>T>>W; //对角标的控制要自己想好 for(int i=0;i<T;i++) { int n; cin>>n; tree[i+1]=n-1; } if(tree[1]==0) { dp[1][0][0]=1; } else { dp[1][1][1]=1; } for(int i=1;i<T;i++) { for(int m=0;m<=W;m++) { for(int z=0;z<2;z++) { if(tree[i+1]==z) { dp[i+1][m][z]=max(dp[i+1][m][z],dp[i][m][z]+1); dp[i+1][m+1][move(z)]=max(dp[i+1][m+1][move(z)],dp[i][m][z]); } else { dp[i+1][m][z]=max(dp[i+1][m][z],dp[i][m][z]); dp[i+1][m+1][move(z)]=max(dp[i+1][m+1][move(z)],dp[i][m][z]+1); } } } } int result=-1; //对T分钟后的DP数组历遍求最大值 for(j=0;j<=W;j++) { for(k=0;k<2;k++) { result=max(result,dp[T][j][k]); } } cout<<result<<endl; return 0; }
相关文章推荐
- Android 弹性ListView和ScrollView 简单优雅地实现回弹效果
- Android软件开发需要学什么
- 再探cocos2d-x-----(1)
- UIWebView
- Android-Notification (通知实现)
- iOS系统介绍
- cocos2d-x 3.x 进度条 ProgressTimer
- Android中使用Handler造成内存泄露的分析和解决
- GridView & ListView (Android盒子开发)
- Objective-C Runtime Reference
- 常用的 Android Studio 快捷键:
- Android软件开发需要学什么
- 构建不依赖于cookie的手机端用户登录机制
- IOS学习第三篇 ——@property属性
- 如何优化cocos2d/x内存使用和程序大小的程序
- AndroidSlidingUpPanel 使用控制和简单的分析方法
- iOS系统介绍
- app上传 需要的icon
- cocos2dx3.4的多线程bug严重
- Swift 属性值监测