浪(吃)了一天,水道题冷静冷静....


题目链接:

http://acm.sgu.ru/problem.php?contest=0&problem=104

题意:

给定每朵花放在每个花盆的值,编号大的花只能放在编号小的花的后面,每朵花都要放到花盆里,问如何放才能使得总值最大?

分析:

还是一道比较水的dp...

每个位置有两种情况:放与不放。

不放的话\(dp[i][j-1][0]\)就等于前面最近的放了花盆的值。

放的话,就更新\(dp[i][j][1]\)。

这样保证对于每个花盆\(i\)花\(j\),\(max(dp[i - 1][j - 1][0] ,dp[i - 1][j - 1][1])\)表示放置第\(j-1\)号花后得到的最大的值。

最后逆推一遍,获得路径即可。

代码:

#include<cstdio>
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
const int maxn = 100 + 5;
int dp[maxn][maxn][2];
int v[maxn][maxn];
stack<int>s;
int main (void)
{
int n, m;
scanf("%d%d", &m, &n);
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
scanf("%d", &v[i][j]);
}
}
memset(dp, -0x3f, sizeof(dp));
dp[0][0][0] = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
dp[i][j - 1][0] = max(dp[i - 1][j - 1][0] ,dp[i - 1][j - 1][1]);
dp[i][j][1] = max(dp[i - 1][j - 1][0], dp[i - 1][j - 1][1]) + v[j][i];
}
}
int ans = max(dp[n][m][1], dp[n][m][0]);
printf("%d\n", ans);
int sta = n;
for(int i = m; i >= 0; i--){
for(int j = sta; j >= 0; j--){
if(dp[j][i][1] == ans && ans){
s.push(j);
sta = j - 1;
ans -= v[i][j];
break;
}
}
}
while(!s.empty()){
int res =s.top();
s.pop();
printf("%d ", res);
}
printf("\n");
return 0;
}

SGU 104 Little shop of flowers【DP】的更多相关文章

  1. SGU 104. Little shop of flowers (DP)

    104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB PROBLEM Yo ...

  2. sgu 104 Little shop of flowers 解题报告及测试数据

    104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...

  3. 动态规划(方案还原):SGU 104 Little shop of flowers

    花店橱窗布置问题 时间限制:3000 ms 问题描述(Problem)    假设你想以最美观的方式布置花店的橱窗,你有F束花,每束花的品种都不一样,同时,你至少有同样数量的花瓶,被按顺序摆成一行.花 ...

  4. sgu 104 Little Shop of Flowers

    经典dp问题,花店橱窗布置,不再多说,上代码 #include <cstdio> #include <cstring> #include <iostream> #i ...

  5. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  6. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  7. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  8. HDOJ 1257 最少拦截系统 【DP】

    HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  9. HDOJ 1159 Common Subsequence【DP】

    HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

随机推荐

  1. 版本号比较versioncompare方法,java实现

    测试

  2. (转)SpringMVC学习(七)——Controller类的方法返回值

    http://blog.csdn.net/yerenyuan_pku/article/details/72511844 本文所有案例代码的编写均建立在前文SpringMVC学习(六)——SpringM ...

  3. linux 隐藏进程

    1.首先推荐一个后门程序https://github.com/f0rb1dd3n/Reptile 具体可以了解一下功能非常强大. 2.源码如下 root@ubuntu:/var/srt/libproc ...

  4. 雷林鹏分享:Lua 基本语法

    Lua 学习起来非常简单,我们可以创建第一个 Lua 程序! 第一个 Lua 程序 交互式编程 Lua 提供了交互式编程模式.我们可以在命令行中输入程序并立即查看效果. Lua 交互式编程模式可以通过 ...

  5. jquery 拖动(Draggable) 约束运动,输出数组排序Array

    <!doctype html><html lang="en"><head> <meta charset="utf-8" ...

  6. C指针与数组之间的细节

    看以下代码: #include <stdio.h> void f(char**); int main() { char *argv[] = { "ab", " ...

  7. Sdoi2014 向量集

    题目描述 题解: 码力太差重构之后才$A……$ 首先求向量点积最大很容易想到凸包, 设已知$(x_0,y_0)$,求$(x,y)$满足$(x,y)*(x_0,y_0)>=(x',y')*(x_0 ...

  8. 常用的网络通信命令--write.wall.mesg.mail

    write 作用:给其它的在线用户发送消息 格式:write  [ 用户名 ]  [ tty ] 注意点:使用之前最好使用 who 命令查看当前在线用户,tty 为端口号 使用举例: 在光标闪烁的地方 ...

  9. 【MySQL】索引和锁

    前言 本文摘自数据库两大神器[索引和锁] 声明:如果没有说明具体的数据库和存储引擎,默认指的是MySQL中的InnoDB存储引擎 索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度 表 ...

  10. ES5的数组方法

    参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array Array.prot ...