boj 1209 魂斗罗 用简单dp解决问题
2011-04-04 23:46
309 查看
1.dp[i][j]保存到i行j列元素的最大值
地址:http://boj.me/onlinejudge/showproblem.php?problem_id=1209
魂斗罗
Submit: 781 Accepted:257Time Limit: 1000MS Memory Limit: 65536K
Description
游戏我小时候的最爱,相信也是大家的最爱。魂斗罗便是其中一种,可在我们为它疯狂之时,是否想过去了解更多有关它的背景呢?
魂斗罗(魂斗羅 Contra)是日本Konami公司于1987年发行的街机卷轴射击游戏系列,但是后来移植到其他平台。玩家扮演特种兵,面对大量的敌人,从人和机器到异形和外星人。在战斗途中,玩家可以击落飞行的特殊目标来获得各种强化。游戏的成功卖点包括支持两个玩家同时进行游戏(双打),以及几个场景的纵深视角。
剧情:
最初的日本版剧情设定于27世纪。公元2631年,一个神秘的陨星坠落于新西兰附 近的虚构的加鲁加群岛。两年后的2633年,地球联邦政府获悉武装组织“红色猎鹰”在陨石坠落地点附近建立了军事基地并意图利用陨石内的异形开发毁灭人类 的兵器。于是,地球联邦海军陆战队派遣其所属的魂斗罗小队的上等兵比尔·雷泽(ビル・ライザー Bill Rizer,1P)和兰斯·比恩(ランス・ビーン Lance Bean,2P)前往摧毁“红色猎鹰”及异形。红色猎鹰的标志在游戏中表现为运载强化武器的工具。
秘技:
游戏的秘技也就是著名的柯拿米秘技,是在标题画面出现之前依次按“上上下下左右左右BA”(美版需再追加一次BA,即上上下下左右左右BABA),然后选择玩家数目,之后按开始按钮。如果输入成功,玩家的初始生命数会从3增至30。这个秘技最初出现于Konami公司的游戏グラディウス中,后来在Konami公司的其他游戏中继续使用,例如魂斗罗和グラディウス的续作沙罗曼蛇。
konami 公司为了把这个游戏得到更大的推广于是该公司决定来开展一次促进活动。
活动内容: 任何一个人都可以报名参加 , 报名参加的选手需要先闯过该游戏的每一关,
然后找数字拿奖品 。 找数字的的规则如下:
数字分布在一个 R X C ( 1 <= R , C <= 100 ) 的矩形方阵里,这个方阵里含有R X C 个小的正方形的小纸片,每个正方行纸片上都标有一个数 number
( 0 <= number <= 100 ) 选手只能从这个方阵的左侧进入该方阵并向右侧前进,前进时只能由当前所在的方格走到与它相邻的三个格子里面如 :
( i , k ) -> ( i , k + 1 ) , ( i - 1 , k + 1 ) , ( i + 1 , k+ 1 )
他经过每个格子时就可以把这个格子加到自己的总分里去,这样他从右侧出来后就有个得分,公司会按照选手的得分情况来分发奖品,当然分数最高的拿到的奖品就最好了,问题就是怎样才能拿到最高的分数呢?
Input
多个测试用例 每个测试用例包含两部分
第一部分 : 一行 两个正整数 R , C ;
第二部分 : R 行 C 列 个整数 ;
Output
一个整数最后可能的到的最高分 。
Sample Input
2 3
2 3 4
5 6 7
Sample Output
18
Source
Dreamzk
#include<iostream>
using namespace std;
//int a[110][110];
int dp[110][110];
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int maxt(int a,int b,int c)
{
if(a>=b&&a>=c)
return a;
else if(b>=a&&b>=c)
return b;
else
return c;
}
int main()
{
int r,c,i,j;
while(scanf("%d%d",&r,&c)!=EOF)
{
int maxc=0;
int a[r][c];
// int dp[r][c];
for(i=0;i<r;i++)
for(j=0;j<c;j++)
scanf("%d",&a[i][j]);
for(i=0;i<r;i++)
dp[i][0]=a[i][0];
for(j=1;j<c;j++)
for(i=0;i<r;i++)
{
if(i==0)
{
dp[i][j]=max(dp[i][j-1],dp[i+1][j-1])+a[i][j];
}
else if(i==r-1)
{
dp[i][j]=max(dp[i-1][j-1],dp[i][j-1])+a[i][j];
}
else
{
dp[i][j]=maxt(dp[i-1][j-1],dp[i][j-1],dp[i+1][j-1])+a[i][j];
}
}
maxc=dp[0][c-1];
for(i=0;i<r;i++)
{
if(dp[i][c-1]>maxc)
maxc=dp[i][c-1];
}
printf("%d/n",maxc);
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
a[i][j]=0;
dp[i][j]=0;
}
}
system("pause");
}
地址:http://boj.me/onlinejudge/showproblem.php?problem_id=1209
魂斗罗
Star it! |
Description
游戏我小时候的最爱,相信也是大家的最爱。魂斗罗便是其中一种,可在我们为它疯狂之时,是否想过去了解更多有关它的背景呢?
魂斗罗(魂斗羅 Contra)是日本Konami公司于1987年发行的街机卷轴射击游戏系列,但是后来移植到其他平台。玩家扮演特种兵,面对大量的敌人,从人和机器到异形和外星人。在战斗途中,玩家可以击落飞行的特殊目标来获得各种强化。游戏的成功卖点包括支持两个玩家同时进行游戏(双打),以及几个场景的纵深视角。
剧情:
最初的日本版剧情设定于27世纪。公元2631年,一个神秘的陨星坠落于新西兰附 近的虚构的加鲁加群岛。两年后的2633年,地球联邦政府获悉武装组织“红色猎鹰”在陨石坠落地点附近建立了军事基地并意图利用陨石内的异形开发毁灭人类 的兵器。于是,地球联邦海军陆战队派遣其所属的魂斗罗小队的上等兵比尔·雷泽(ビル・ライザー Bill Rizer,1P)和兰斯·比恩(ランス・ビーン Lance Bean,2P)前往摧毁“红色猎鹰”及异形。红色猎鹰的标志在游戏中表现为运载强化武器的工具。
秘技:
游戏的秘技也就是著名的柯拿米秘技,是在标题画面出现之前依次按“上上下下左右左右BA”(美版需再追加一次BA,即上上下下左右左右BABA),然后选择玩家数目,之后按开始按钮。如果输入成功,玩家的初始生命数会从3增至30。这个秘技最初出现于Konami公司的游戏グラディウス中,后来在Konami公司的其他游戏中继续使用,例如魂斗罗和グラディウス的续作沙罗曼蛇。
konami 公司为了把这个游戏得到更大的推广于是该公司决定来开展一次促进活动。
活动内容: 任何一个人都可以报名参加 , 报名参加的选手需要先闯过该游戏的每一关,
然后找数字拿奖品 。 找数字的的规则如下:
数字分布在一个 R X C ( 1 <= R , C <= 100 ) 的矩形方阵里,这个方阵里含有R X C 个小的正方形的小纸片,每个正方行纸片上都标有一个数 number
( 0 <= number <= 100 ) 选手只能从这个方阵的左侧进入该方阵并向右侧前进,前进时只能由当前所在的方格走到与它相邻的三个格子里面如 :
( i , k ) -> ( i , k + 1 ) , ( i - 1 , k + 1 ) , ( i + 1 , k+ 1 )
他经过每个格子时就可以把这个格子加到自己的总分里去,这样他从右侧出来后就有个得分,公司会按照选手的得分情况来分发奖品,当然分数最高的拿到的奖品就最好了,问题就是怎样才能拿到最高的分数呢?
Input
多个测试用例 每个测试用例包含两部分
第一部分 : 一行 两个正整数 R , C ;
第二部分 : R 行 C 列 个整数 ;
Output
一个整数最后可能的到的最高分 。
Sample Input
2 3
2 3 4
5 6 7
Sample Output
18
Source
Dreamzk
#include<iostream>
using namespace std;
//int a[110][110];
int dp[110][110];
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int maxt(int a,int b,int c)
{
if(a>=b&&a>=c)
return a;
else if(b>=a&&b>=c)
return b;
else
return c;
}
int main()
{
int r,c,i,j;
while(scanf("%d%d",&r,&c)!=EOF)
{
int maxc=0;
int a[r][c];
// int dp[r][c];
for(i=0;i<r;i++)
for(j=0;j<c;j++)
scanf("%d",&a[i][j]);
for(i=0;i<r;i++)
dp[i][0]=a[i][0];
for(j=1;j<c;j++)
for(i=0;i<r;i++)
{
if(i==0)
{
dp[i][j]=max(dp[i][j-1],dp[i+1][j-1])+a[i][j];
}
else if(i==r-1)
{
dp[i][j]=max(dp[i-1][j-1],dp[i][j-1])+a[i][j];
}
else
{
dp[i][j]=maxt(dp[i-1][j-1],dp[i][j-1],dp[i+1][j-1])+a[i][j];
}
}
maxc=dp[0][c-1];
for(i=0;i<r;i++)
{
if(dp[i][c-1]>maxc)
maxc=dp[i][c-1];
}
printf("%d/n",maxc);
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
a[i][j]=0;
dp[i][j]=0;
}
}
system("pause");
}
相关文章推荐
- boj 1345 二叉树问题 简单的dp
- 简单完美解决PullToRefreshLayout中PullableListView嵌套ViewPager时滑动冲突的问题
- 我的第一篇博客,java面向对象来解决简单的问题--杭电2001
- onMeasure简单方法 完美解决ListView与ScollView冲突问题!
- 简单的循环判断解决约瑟夫环问题
- 完美又简单解决Fedora16下使用Sun-JDK的汉字乱码(口口)问题
- firefox无法输入中文问题解决方法 - 简单有效
- 简单解决IE6中浮动 div 被 select 遮盖问题
- Android中遇到问题时的解决方案:突出一个简单粗暴!Android Activity泄漏问题解决方案
- [导入][转]一条语句简单解决“每个Y的最新X”的SQL经典问题
- C#:解决三道简单而繁琐问题
- 突出一个简单粗暴!Android Activity泄漏问题解决方案
- Eclipse 解决中文字体过小的问题,简单方便
- cocos2d-x在xcode中安装完不显示模板问题的简单解决办法
- 简单解决 XMarks 不能同步书签的问题
- MySQL 5.1 无法创建、修改存储过程的解决(简单问题)
- 使用一个简单的webframe来解决EAI和分工合作问题
- 简单解决AJAX在IE中的缓存问题
- 可靠简单的 解决Microsoft.Jet.OLEDB.4.0 不能在64位系统下使用的问题
- 简单的string问题解决:Detect Capital