`
Simone_chou
  • 浏览: 192852 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

聪明的kk(动态规划)

    博客分类:
  • NYOJ
 
阅读更多

聪明的kk

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述
聪明的“KK”
非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙丘,体现出本国不断变换和绚丽多彩的自然风光与城市风貌。展馆由五部分组成,馆内影院播放名为《一眨眼的瞬间》的宽银幕短片,反映了建国以来人民生活水平和城市居住环境的惊人巨变。
可移动“沙丘”变戏法 的灵感源于其独特而雄伟的自然景观——富于传奇色彩的险峻沙丘。宏伟的结构、可循环的建材,与大自然相得益彰。环绕一周,发现它正是从沙丘那不断变换的形态中汲取灵感的。外形逼真到无论从哪个角度去观察,都能清楚地辨识出沙丘的特征。
它“坡面”高达20米,微风吹来,你是否感觉到沙的流动?用手去触碰,却发现原来是“魔术戏法”。它表面的不锈钢面板呈现出一种富于变幻的色彩,从不同角度观察,呈现不同色泽,由此来模仿流动沙丘的光感。
走进第三展厅有一个超大的屏幕,通过奇妙的特效,让观众犹如亲身来到浩瀚的沙漠。更为奇妙的是,只见一个小动物“KK”正从沙漠区域(矩形)的左上角沿着向右或向下的方向往右下角跑去。KK太聪明了,它居然能在跑的过程中会选择吃掉尽可能多的虫子线路。
你知道它吃掉多少虫子吗?
输入
第一行:N M (1≤N M≤20 0≤Xij≤500(i=1,2„.N, j=1,2„,M)
)表示沙漠是一个N*M的矩形区域
接下来有N行:每行有M个正整数,Xi1 Xi2 ……Xim 表示各位置中的虫子数(单个空格隔开)
假设“KK”只能向右走或向下走。
输出
输出有一个整数, 表示“KK”吃掉最多的虫子数。
样例输入
3 4
3 1 2 8
5 3 4 6
1 0 2 3
样例输出
24

   思路:

   考虑每个数的来源,第一行和第一列每个数的来源只有一个,所以第一行与第一列每个数都是一个可以确定的数。然后从中间的元素开始看,每个来源有两个,这时候要使终点值最大,那么应该途中的每个数都应该以最大的条件来考虑,所以两个数来源应取用大的那个数,最后得出来的终点值就是最大的了。

 

   例子如表格所示:

3 1+3=4 2+4=6 8+6=14
5+3=8 3+8=11 4+11=15 6+15=21
1+8=9 0+11=11 2+15=17 3+21=24

    AC:

#include<stdio.h>
int main()
{
	int n,m,i,j;
	int number[25][25];
	int sum[25][25];
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	 for(j=1;j<=m;j++)
	  scanf("%d",&number[i][j]);
	
//	printf("\n");
//	for(i=1;i<=n;i++)
//	 {
//	  for(j=1;j<=m;j++)
//	   printf("%d ",number[i][j]);
//      printf("\n");
//       }
	 
	 sum[1][1]=number[1][1];
	 for(i=2;i<=n;i++)
	   sum[i][1]=number[i][1]+sum[i-1][1];
	 for(i=2;i<=m;i++)
	   sum[1][i]=number[1][i]+sum[1][i-1];
//对只有一个来源的第一行第一列元素进行计算赋值
	 for(i=2;i<=n;i++)
	  for(j=2;j<=m;j++)
	  {
	    if(sum[i][j-1]>sum[i-1][j]) sum[i][j]=number[i][j]+sum[i][j-1];
	    else sum[i][j]=number[i][j]+sum[i-1][j];
	  }
//对有两个来源的元素进行对比加和  
	printf("%d\n",sum[n][m]); 
	return 0;
}

   最优解法:

#include<iostream>
using namespace std;
int f[22][22];
int main()
{
   int n,m,c;
   cin>>m>>n;
  for(int i=1;i<=m;i++)
    for(int j=1;j<=n;j++)
      {
       cin>>c;
       f[i][j]=max(f[i][j-1],f[i-1][j])+c;
//设当时状态为第i行,第j列
//所以要此时这点的值最大,那么应加上它的左边f[i][j-1]或者上边f[i-1][j]的最大值才对,而当时处在这个位置的值也需要加上
//无论如何处在这个位置的值都是一定要加上的
      }
  cout<<f[m][n]<<endl;
}

   

   总结:

   看完NYOJ给出的最优解法,真的有想一头撞死的冲动,f[i][j]=max(f[i][j-1],f[i-1][j])+c,其实就是题目给出的两个条件来源……想得太过复杂了,跟之前动态规划的例题很相似,但是那题的终点是不确定的,然后想到了这题的终点是确定的。还有,想到边界的情况应该怎么算才对,其实第0行和第0列也可以当成是来源,因为值是0没有根本影响……而且不需要另外开个数组来保存处在每个位置的值,每次比较完后加上就对了,因为这个值是一定要加上的。当循环完N行M列后,最后得出来的f[N][M]也是最大的,并且其他每个格子都是在该位置值最大的时候,因为各个最优才是全局最优。

分享到:
评论

相关推荐

    KK按键安装包含教程_KK按键宝_

    【KK按键宝】是一款在IT行业中广泛使用的自动化工具,它属于按键精灵类的软件,主要功能是帮助用户录制和回放键盘与鼠标的操作,极大地提高了工作效率,尤其在需要重复执行相同步骤的工作场景中,如数据录入、网页...

    KK关系计算方法讲解,kk关系理论推导,Mathematica

    KK关系,全称为Kramers-Kronig关系,是物理学中的一个重要理论,特别是在光学和电磁波理论中占有核心地位。这一关系由荷兰物理学家Hendrik Anthony Kramers和Rudolf Kronig在20世纪20年代提出,用于描述介质的频域...

    kk447.zip_kk447

    在提供的“kk447.zip_kk447”压缩包中,包含一个名为“kk447.m”的MATLAB程序文件,这个文件很可能是用于实现分数阶傅里叶变换的一个示例或者教学脚本。MATLAB用户可以通过学习和运行这个脚本来理解和掌握分数阶...

    KK飞控源代码

    《KK飞控源代码解析与探讨》 KK飞控,全称为KK Multicopter Flight Controller,是无人机领域中一种简易而普及的飞行控制器。其2.9版本的源代码,是韩版固件的一个重要组成部分,虽然不包含驱动程序,但依然是理解...

    kk.rar_706kk com_www.706kk.com

    【标题】"kk.rar_706kk com_www.706kk.com" 提供的是一个可能与网站706kk.com相关的压缩文件。这个文件的命名方式暗示了它来源于该网站,可能是该网站提供的某种资源或者软件。 【描述】描述中提到的功能是一个秒表...

    如何在Word中输入KK音标符号

    在Word中输入KK音标是英语教学中一项实用的技能,尤其对于英语老师来说,能够帮助他们更准确地标注和教授发音。KK音标,全称为Kenyon-Kincaid Phonetic Alphabet,是一种广泛用于北美英语的音素表示法,与国际音标...

    kubesphere安装 kk文件

    kubesphere安装 kk文件,国内不容易下载

    KKL.zip_KLine_ecu_kkl_obd_zip

    《KKL.zip_KLine_ecu_kkl_obd_zip——深入解析K-Line协议与OBD接口技术》 在汽车诊断和编程领域,K-Line协议扮演着至关重要的角色,它是一种广泛应用于车辆电子控制单元(ECU)通信的标准。本文将详细探讨KKL(K-...

    KK中文说明书

    KK中文说明书

    kk-kz_1819kk_LanguagePack_1819kk电影_2341kk_kz_

    《kk-kz_1819kk_LanguagePack_1819kk电影_2341kk_kz_》是针对OpenCart电子商务平台的一款语言包,主要服务于那些使用Kazakh语(kk)作为主要交流语言的用户群体。OpenCart是一款广泛应用的开源电子商务系统,它以其...

    KK-ZIP 1.0

    《KK-ZIP 1.0:一款便捷的文件压缩与解压工具》 在数字化的世界里,文件的压缩和解压已经成为日常工作中不可或缺的一部分。KK-ZIP 1.0,这款由科凯软件工作室精心打造的工具,为用户提供了一种高效、易用的方式来...

    kk_xshow(导航首页四格 )

    3. **交互性增强**:kk_xshow支持动态效果,如滑动、滚动、点击响应等,使导航页面更具吸引力。 4. **内容更新**:用户可以方便地更新每个模块的内容,保持首页的实时性和新鲜感。 二、kk_xshow的使用流程 1. **...

    KK录像机破解补丁 20160820

    KK录像机破解补丁 20160820

    KK4D使用方法1

    KK4D是一款专门用于共线性分析的工具,它可以计算Ka、Ks以及4DTv等遗传距离指标。在进行生物信息学研究时,理解基因间的共线性关系对于揭示物种间的进化历史和基因复制事件具有重要意义。以下是关于KK4D的详细使用...

    94KK论坛 绿色春天

    在“94KK39”压缩包中,可能会包含JavaScript文件,它们负责实现动态效果,如轮播图、下拉菜单、表单验证等。这些脚本可以提升用户体验,使网站更加生动和互动。 此外,压缩包中可能还包含其他辅助文件,如图像、...

    KK录像机永久VIP软件+详细教程.

    《KK录像机永久VIP软件与详细教程解析》 在数字化时代,各种在线视频资源丰富多样,为了方便用户记录和分享这些精彩瞬间,KK录像机应运而生。它是一款功能强大的屏幕录制工具,深受广大用户的喜爱。而"KK录像机永久...

    kk录像机.zip

    它允许用户捕捉电脑屏幕上的任何动态,无论是网页浏览、软件操作还是游戏过程。用户可以自由选择录制整个屏幕、特定窗口或自定义区域。这对于制作教程、游戏攻略或者进行远程工作协作都非常有用。 2. **音频录制**...

    天涯KK大神 天涯神贴预测房产2

    天涯KK大神 天涯神贴预测房产 天涯大神KK关于中国房地产市场的神圣预测 真的是在一步一步实现吗? 第一步:开闸放水 这个已经完成了。 第二步:房价飙升 已经完成 第三步:卖地解决地方债务危机, 已经完成 ...

    KK渲染器软件

    【KK渲染器软件】 KK渲染器,全称为Krakatoa,是一款专为3D图形设计和视觉特效行业开发的高性能、高度可定制的体积粒子渲染工具。它以其卓越的粒子渲染能力,尤其是在大规模粒子效果方面,深受专业设计师和艺术家们...

    KK关系计算方法讲解,kk关系理论推导,Mathematica源码.zip

    KK关系,全称为Kaluza-Klein(KK)理论,是一种在物理学中探索高维空间与四维可观察宇宙之间关系的理论。该理论最早由Theodore Kaluza和Oskar Klein在20世纪初提出,试图将广义相对论与电磁场理论统一在一个五维的空间...

Global site tag (gtag.js) - Google Analytics