收集苹果
来源:互联网 发布:网络桌游平台 编辑:程序博客网 时间:2024/05/05 10:33
问题:
还有dijkstra算法也可以,求最短路径,相应地求最长路径也是可以的..代码就不给出了.
一个拥有N*M个单元的格子,每一个里面都有着一定数量的苹果,数量已经给定。现在你位于左上角。每一步你可以向下走或者向右走。问你能够收集到最多多少个苹果。
作为比较经典的题目给出几种算法.
最简单的莫过于动态规划了.
#include<iostream>#include<memory.h>using namespace std;int main(){ int a[3][3]={1,2,3,5,6,4,2,1,1}; int s[4][4]; memset(s,0,sizeof(s)); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { if(j==0&&i==0) s[i][j]=a[i][j]; if(j>0&&i==0) s[i][j]=a[i][j]+s[i][j-1]; if(i>0&&j==0) s[i][j]=a[i][j]+s[i-1][j]; if(j>0&&i>0) s[i][j]=a[i][j]+max(s[i][j-1],s[i-1][j]); } } cout<<s[2][2]<<endl; system("pause");}
dfs的:
#include<iostream>#include<memory.h>#include<algorithm>using namespace std;int origin[3][3]={1,2,3,5,6,4,2,1,1};int ans[100];int xchange[]={0,1};int ychange[]={1,0};int cost[4];int flag=false;int b=0;int num=0;void dfs(int row,int col,int deep){ if(row==2&&col==2) { for(int i=0;i<4;i++) { ans[num]+=cost[i]; } ans[num]+=origin[row][col]; num++; return; } for(int i=0;i<2;i++) { int new_row=row+xchange[i]; int new_col=col+ychange[i]; if(new_col>=0&&new_col<=2&&new_row>=0&&new_row<=2) { cost[deep]=origin[row][col]; //ans+=origin[row][col]; dfs(new_row,new_col,deep+1); } } }int main(){ memset(ans,0,sizeof(ans)); dfs(0,0,0); sort(ans,ans+num); cout<<ans[num-1]<<endl; system("pause"); }
还有dijkstra算法也可以,求最短路径,相应地求最长路径也是可以的..代码就不给出了.
- 收集苹果
- 收集苹果(dp)
- 黑苹果安装教材收集
- 《收集苹果》 动态规划入门
- 苹果耍流氓、非法收集惹了火~
- 黑苹果专用工具驱动收集整理
- Dynamic Programming动态规划之收集苹果
- 收集苹果(动态规划法,二维)
- APP被苹果APPStore拒绝的各种原因(收集)
- 《苹果》
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- hdd mounted fail
- UIEdgeInsetsMake的作用
- 如何让自己的程序以管理员身份运行 C#
- 创建Zend Framework 项目 linux ubuntu 或者centos6.3下
- X11,xorg.conf配置详解
- 收集苹果
- 排序(五)——关于桶式排序
- MySQL性能优化的最佳20+条经验
- JNI Native数据类型与Java数据类型对照表
- 【Silverlight】Bing Maps学习系列(七):使用Bing Maps的图片系统(Tile System)
- C ADT(抽象数据类型)
- new Runnable() 什么意思
- 301、404、200、304、500HTTP状态
- 我对存储映射I/O的理解