zoukankan      html  css  js  c++  java
  • [Swust OJ 1139]--Coin-row problem

     题目链接:  http://acm.swust.edu.cn/contest/0226/problem/1139/

    There is a row of n coins whose values are some positive integers c₁, c₂,...,cn, not necessarily distinct. The goal is to pick up the maximum amount of money subject to the constraint that no two coins adjacent in the initial row can be picked up. 
    Description
    Two lines, the first line is n (0< n <=10000), and the second line is value of coin(0< value <= 2^32).
    Input
    the maximum amount of money.
    Output
    1
    2
    6
    5 1 2 10 6 2
    Sample Input
    1
    17
    Sample Output
    Hint
    Algorithm Text Book
     
    题目大意:就是给你一排数字,不能够拿相邻的数字,问拿的数字的最大和为多少~~
     
    思路:估计这老师才讲了dp 算法吧,这组题几乎全是dp(也是醉了)
    不能够相邻那么就考虑当前位的前两个数对应的最好状态+当前数,和当前数的前一个数的状态比较,这里的边界dp[0]=0,dp[1]=x[1](x数据元素数组从1开始存贮),
    那么可以得到如下dp方程  dp[i] = max(dp[i - 1], dp[i - 2] + x[i]);
     
    具体的看代码理解吧~~~
     
     1 #include <iostream>
     2 using namespace std;
     3 int n, dp[10001], i, x[10001];
     4 #define max(a,b) a>b?a:b
     5 int main()
     6 {
     7     cin >> n;
     8     for (i = 1; i <= n; i++) cin >> x[i];
     9     dp[1] = x[1];
    10     for (i = 2; i <= n; i++)
    11         dp[i] = max(dp[i - 1], dp[i - 2] + x[i]);
    12     cout << dp[n] << "
    ";
    13     return 0;
    14 }
    View Code

     dp就是这么牛逼,几行代码就整出了答案~~~

     
  • 相关阅读:
    [板子]用线段树解决ST表问题
    [POJ2528]Mayor's posters(离散化+线段树)
    [板子]Kruskal
    [板子]segTree
    js实现工具函数中groupBy数据分组
    关于爬虫
    jsencrypt vue相关的rsa加密
    less 循环模拟sass的for循环效果
    vue 自动生成菜单
    vue中form 表单常用校验封装(async-validator)
  • 原文地址:https://www.cnblogs.com/zyxStar/p/4541093.html
Copyright © 2011-2022 走看看