POJ 2385 Apple Catching
来源:互联网 发布:数据还原 编辑:程序博客网 时间:2024/05/16 17:56
题意是有两棵树,每分钟有且只有一棵树会有苹果下落,树下一头奶开始在1树下,奶牛每分钟只能选择移动或不移动,现按序给定苹果下落的树号,求解奶牛最多得到的苹果数。
此题动态规划求解,dp[i][j]表示第i分钟移动j次所接到的苹果最大数,则不难得到转移方程dp[i][j]=max{dp[i-1][j],dp[i-1][j-1]},边界是dp[i][j] j==0时,所得到的苹果为i分钟内1树的苹果数,若第一分钟苹果出现在1树上,则dp[1][0]为1,dp[1][1]为0;若第一分钟苹果出现在2树上,则dp[1][0]为0,dp[1][1]为1,最后找到t分钟时w步以内的最大值就可以看,也就是max{dp[t][0],dp[t][1]...dp[t][w-1]},代码如下:
#include <iostream>using namespace std;int dp[1010][32];//dp[i][j]表示第i分钟移动j步可得的最大苹果数int main(){ios::sync_with_stdio(false);int app[1010];int t,w;cin>>t>>w;for(int i=1;i<=t;i++)cin>>app[i];dp[1][0]=app[1]==1?1:0;//如果第一个苹果出现在第一棵树上,则第1分钟移动0步可得1个苹果dp[1][1]=app[1]==2?1:0;//如果第一个苹果出现在第二棵树上,则第1分钟移动1步可得1个苹果for(int i=2;i<=t;i++)for(int j=0;j<=w;j++){if(j==0)dp[i][j]=dp[i-1][j]+(app[i]==1?1:0);//若未移动,则苹果数为上一分钟苹果数加这一分钟1树的苹果else{dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]);//转移方程if(app[i]==j%2+1)dp[i][j]++;}}int maxn=-2000;for(int i=0;i<=w;i++)//找出t分钟移动i步以内获得的最大苹果数maxn=max(maxn,dp[t][i]);cout<<maxn<<endl;return 0;}
0 0
- POJ 2385 Apple Catching
- POJ-2385-Apple Catching
- poj 2385 Apple Catching
- POJ 2385 Apple Catching
- poj 2385 Apple Catching
- POJ 2385 Apple Catching
- Apple Catching.(POJ-2385)
- poj 2385 Apple Catching
- poj 2385 Apple Catching
- POJ 2385Apple Catching
- poj 2385 Apple Catching
- POJ 2385 Apple Catching
- POJ 2385 Apple Catching
- POJ 2385 Apple Catching
- POJ 2385 Apple Catching
- POJ 2385 Apple Catching
- poj-2385-Apple Catching
- Apple Catching POJ 2385
- 编写一个函数 char *my_strnchr(char const *str,int ch,int which)
- dmalloc的使用
- 用笔记本远程访问连接在路由器上的树莓派
- Javascript:表单验证(验证空值/邮箱格式)
- JAR文件
- POJ 2385 Apple Catching
- C中如何调用C++函数
- iOS之KxMenu第三方的使用
- TypeError: $(...).ajaxSubmit is not a function
- Android4.4 Keyguard锁屏机制分析
- ios编译运行提示:unable to boot ios simulator
- SurfaceView之SurfaceHolder
- DevExpress下拉多选框CheckedComboBoxEdit赋值和设置默认值
- Matlab实践备忘笔记