大致题意: n个东西放在(1.2.3.。。m)个容器中,先放的必需在后方的左边。a[i][j]表示i号物品放在j容器所得

的价值,求最大价值。

几乎是刚刚开始接触动态规划题,开始我这样想 每个东西一件一件放,dp[k]表放k物品时候已经到达最大值

dp[k]=dp[k-1]+max(放k物品所得到最大值),这样想想不行,如果现在放最大值未必最大啊。

百度一下,发现别人用二维数组,我马上想想得二维的,于是dp[i][j]第i次放置放j容器时,所得最大值。

这样:dp[i][j]=max(dp[i-1][k])(k<=j-1;k>=i-1);画了个图,第i次选择j就是前一次中所有可能情况最大值,

这样地推,必然得到最大。最后在更新时候记录路经即可。

PS:不会dp的acmer能叫acmer吗!需要更多的dp来鞭挞我啊!渴望!

#include<iostream>   //1A  ,31ms
#include<cstdio>
using namespace std;
int nowmax[110][110];
int a[110][110];
int n,m;
void readin()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
for(int i=1;i<=m;i++)
nowmax[1][i]=a[1][i];
}
int fa[105][105];
int way[105];int num=0;
int main()
{
readin();
for(int i=2;i<=n;i++)
for(int j=i;j<=m-(n-i);j++) //对每个i,j
{
int maxid=1;
int max=nowmax[i-1][i-1];
for(int k=j-1;k>i-1;k--) //更新找最大的
{
if(nowmax[i-1][k]>max)
{
max=nowmax[i-1][k];
maxid=k;
}
}
nowmax[i][j]=a[i][j]+max;
fa[i][j]=maxid;
}
int ans=nowmax[n][m];
int anslast=m;
for(int k=n;k<m;k++)
{
if(ans<nowmax[n][k])
{
ans=nowmax[n][k];
anslast=k;
}
}
cout<<ans<<endl;
int maxid=anslast;
way[num++]=anslast;
for(int i=n;i>1;i--)
{
way[num++]=fa[i][maxid];
maxid=fa[i][maxid];
}
for(int i=num-1;i>=0;i--)
{
if(i!=0)printf("%d ",way[i]);
else printf("%d\n",way[i]);
}
}

SGU104 二维dp的更多相关文章

  1. 洛谷p1732 活蹦乱跳的香穗子 二维DP

    今天不BB了,直接帖原题吧  地址>>https://www.luogu.org/problem/show?pid=1732<< 题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现 ...

  2. HDU - 2159 FATE(二维dp之01背包问题)

    题目: ​ 思路: 二维dp,完全背包,状态转移方程dp[i][z] = max(dp[i][z], dp[i-1][z-a[j]]+b[j]),dp[i][z]表示在杀i个怪,消耗z个容忍度的情况下 ...

  3. 传纸条 NOIP2008 洛谷1006 二维dp

    二维dp 扯淡 一道比较基本的入门难度的二维dp,类似于那道方格取数,不过走过一次的点下次不能再走(看提交记录里面好像走过一次的加一次a[i][j]的也AC了,,),我记得当年那道方格取数死活听不懂, ...

  4. 洛谷P1048 采药 二维dp化一维

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个 ...

  5. 关于二维DP————站上巨人的肩膀

    意匠惨淡经营中ing, 语不惊人死不休........ 前几天学了DP,做了个简单的整理,记录了关于DP的一些概念之类的,今天记录一下刚学的一个类型 ----关于二维DP 那建立二维数组主要是干嘛用的 ...

  6. BZOJ 2748: [HAOI2012]音量调节【二维dp,枚举】

    2748: [HAOI2012]音量调节 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2010  Solved: 1260[Submit][Statu ...

  7. To the Max 二维dp(一维的变形)

    Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...

  8. POJ 1661 Help Jimmy(二维DP)

    题目链接:http://poj.org/problem?id=1661 题目大意: 如图包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的 ...

  9. 洛谷1387(基础二维dp)

    题目很简单,数据也很小,但是思路不妨借鉴:dp[i][j]代表以(i,j)为右下角的最长正方形边长. 类比一维里面设“以XX为结尾的最XXX(所求)”. 另外define不要乱用!尤其这种min套mi ...

随机推荐

  1. 关于jQuery中的$发生冲突及解决方案

    问题描述: 在Jquery库中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg')的写法. 当引入多个js库后,其它的js库 ...

  2. AOP日志组件 多次获取post参数

    AOP日志组件 多次获取post参数 需求:新增接口日志组件.通过拦截器对接口URL进行拦截处理,然后将接口post请求的参数与结果,写入日志表. 问题:POST方法的参数是存储在request.ge ...

  3. js获取主机名实现页面跳转

    <script language="javascript" type="text/javascript">        var hostname ...

  4. Tcp 三次握手 四次分手

    看了 余晟以为的 “tcp没那么难吧”,算是对三次握手,四次分手有了一点点理解,记录下来以方便自己以后的查看. 原文链接:https://mp.weixin.qq.com/s?__biz=MzA3MD ...

  5. Shell中各种括号的作用

    一.小括号,圆括号() 1.单小括号 () ① 命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号 ...

  6. 王小胖之 Base64编码/解码

    使用场景:编码网址作为URL参数,简单编码或加密数据,下载地址生成或解析. 实现功能:BASE64在线编码和解码. 数据实例:王小胖好啊,王小胖顶呱呱!! ~~ english 123 !@#$%^& ...

  7. Lex与Yacc学习(七)之环境配置另一种方式

    必备工具 flex-2.5.4a-1.exe   和  bison-2.4.1-setup.exe   以及 cygwin2.738 的安装文件,下载地址 http://download.csdn.n ...

  8. 2. vsCode 安装GoCode

    1)安装gocode 打开命令提示符(以管理员身份打开),输入: go get -u -v github.com/nsf/gocode 开始下载: 下载完毕: 下载完成,查看D:\GoWorks目录, ...

  9. grunt与requirejs结合使用

    // 多个js压缩成一个js // Project configuration. module.exports = function(grunt) { // 使用严格模式 'use strict'; ...

  10. HTML5教程之本地存储SessionStorage

    SessionStorage: 将数据保存在session对象中,所谓session是指用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间会话,也就是用户浏览这个网站所花费的时间就是sess ...