poj 2385 Apple Catching dp
2015-06-21 08:44
399 查看
http://poj.org/problem?id=2385
意甲冠军:有两个苹果,钟都会有一棵树上会掉下来一个苹果。你必需要站在这棵树下才干接到这棵树掉下来的苹果,你能够在两棵树之间来回走动,并且不花费时间,可是来回走的次数不超过w次,如今告诉你每分钟从哪棵树上会掉下来苹果,问你最多能接着多少个,你的起始位置是在第一棵树下。
思路:用dp[i][j][k]表示第i分钟。已经来回走了j次,并且如今在第k棵树下(k=0表示在第一棵树下。k=1表示在第二棵树下),能接到的最多的苹果数量,那么假设第i分钟,是第一课树掉下苹果。那么easy想到dp[i]][j][0]=max(dp[i-1][j][0]+1,dp[i-1][j-1][1]+1),由于可能之前就在第一棵树下,那么就不须要走动,就能够再接一个苹果,或者之前在第二棵树下,那么就要移动一次才干到第一棵树下,再接一个苹果;dp[i][j][1]=dp[i-1][j][1],以为依据贪心的思想,不可能知道第一棵树要落下苹果。还从第一棵树下走到第二棵树下,所以k=1的情况仅仅有由dp[i-1][j][1]推出。那么同理,我们能够得到第i分钟,是第二棵树掉下苹果的情况了,这里就不再叙述了。假设不明确,就看以下的代码好了。
须要注意的是,最后的答案不一定是移动了最大次数的情况,比方所有都是第一棵苹果树在掉苹果,那么不用移动就能够接到最多的苹果,所以,必须要要在所有的情况中找最大值。
意甲冠军:有两个苹果,钟都会有一棵树上会掉下来一个苹果。你必需要站在这棵树下才干接到这棵树掉下来的苹果,你能够在两棵树之间来回走动,并且不花费时间,可是来回走的次数不超过w次,如今告诉你每分钟从哪棵树上会掉下来苹果,问你最多能接着多少个,你的起始位置是在第一棵树下。
思路:用dp[i][j][k]表示第i分钟。已经来回走了j次,并且如今在第k棵树下(k=0表示在第一棵树下。k=1表示在第二棵树下),能接到的最多的苹果数量,那么假设第i分钟,是第一课树掉下苹果。那么easy想到dp[i]][j][0]=max(dp[i-1][j][0]+1,dp[i-1][j-1][1]+1),由于可能之前就在第一棵树下,那么就不须要走动,就能够再接一个苹果,或者之前在第二棵树下,那么就要移动一次才干到第一棵树下,再接一个苹果;dp[i][j][1]=dp[i-1][j][1],以为依据贪心的思想,不可能知道第一棵树要落下苹果。还从第一棵树下走到第二棵树下,所以k=1的情况仅仅有由dp[i-1][j][1]推出。那么同理,我们能够得到第i分钟,是第二棵树掉下苹果的情况了,这里就不再叙述了。假设不明确,就看以下的代码好了。
须要注意的是,最后的答案不一定是移动了最大次数的情况,比方所有都是第一棵苹果树在掉苹果,那么不用移动就能够接到最多的苹果,所以,必须要要在所有的情况中找最大值。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int dp[1010][35][2]; int a[1010]; int main() { int n,m; while(cin>>n>>m){ memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++){ for(int j=0;j<=m;j++) if(j<=i){ if(a[i]==1){ if(j) dp[i][j][0]=max(dp[i-1][j][0]+1,dp[i-1][j-1][1]+1); else dp[i][j][0]=dp[i-1][j][0]+1; dp[i][j][1]=dp[i-1][j][1]; } else{ dp[i][j][0]=dp[i-1][j][0]; if(j) dp[i][j][1]=max(dp[i-1][j][1]+1,dp[i-1][j-1][0]+1); else dp[i][j][1]=dp[i-1][j][1]+1; } } } int ans=0; for(int i=0;i<=m;i++){ ans=max(ans,dp [i][0]); ans=max(ans,dp [i][1]); } cout<<ans<<endl; } return 0; }
相关文章推荐
- Android Media Playback 中的MediaPlayer的用法及注意事项(一)
- 一步步走进Android MaterialDesign 之 TabLayout
- cocos2dx tableview基础:实现多图片的滑动显示
- Android中Fragment使用VideoView会出现只有声音没有图像的问题
- Android中使用Fragment遇到的问题
- cocos 背景无限滑动!
- Android ListView的header footer设置visibility gone不起作用
- Android界面默认让文本框失去焦点
- Swift学习笔记
- webView加载网页失败时的那个页面怎么替换掉,因为本身的页面很丑
- iOS图片拉伸技巧
- Fragment管理的工具类
- 6.20 androidstudio中使用TestCase
- [C#]Windows文件分类器小程序
- 04_查看Android内存使用情况
- 04_查看Android内存使用情况
- Xamarin 绑定iOS 静态库
- Mono2.0 对C#闭包 与 donet 不同的实现导致Unity的Bug 及解决方案
- cocos studio lua 项目没有 print 输出解决办法
- ios开发,将图片存到相册中