大致题意: 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. CPP-基础:String类

    已知类String的原型为: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String ...

  2. Sql Server 自动备份

    1)启动代理服务 服务->Sql server 代理启动 2)设置维护计划 维护计划->设置维护计划向导->修改名称及说明 3)更改计划 4)选择维护任务 5)顺序调整不做解释 6) ...

  3. CSS 文本下划线 text-decoration

      定义和用法 text-decoration 属性规定添加到文本的修饰. 可能的值 值 描述 none 默认.定义标准的文本. underline 定义文本下的一条线. overline 定义文本上 ...

  4. (转)Objective-C语言--属性和实例变量

    本文转自http://blog.csdn.net/addychen/article/details/39525681 使用Objective-C一段时间了,一直没有弄清楚在Objective-C中属性 ...

  5. cifar-10 图片可视化

    保存cifar-10 数据集 图片 python3 #用于将cifar10的数据可视化 import pickle as p import numpy as np import matplotlib. ...

  6. FX3 DMA生产者消费者ID代表的含义

    在开发FX3的时候,觉得赛普拉斯的库注释太少,很多时候无法理解代码含义.由于使用DMA,需要理解DMA生产者消费者代表的含义,经过多方查找,决定记录下来. 在cyu3dma.h中对SocketID进行 ...

  7. 关于JPA的理解

    JPA全称 Java Persistence API.JPA通过JDK5.0注解或者XML描述对象和关系表的映射关系,并将运行期的实体对象持久化到数据库中.持久化:即把数据(如内存中的对象)保存到可永 ...

  8. Atrenta电话面试(C++研发工程师)

    1.代码量是多少,你负责哪一块,工作量占%几,改进了什么   2.c++ 和 c 的 区别   3.list 和 vector 的 适用条件   4.hash_map 和 map 的 区别 , 使用h ...

  9. linux 下常见命令

    ===============安装和登陆命令============================================================= Mount: 挂载命令.把存储介 ...

  10. EFCore CodeFirst模型迁移生成数据库备注(mysql)

    重写Mysql下sql脚本生成器 using Framework.NetCore.Extensions; using Framework.NetCore.Models; using Microsoft ...