CDOJ-2016-A-柱爷与咸鱼神功

某日,喵哈哈村,柱爷在自己房间内,面对魔镜

“魔镜啊,魔镜,什么才是这个世界上最强大的武功?”

霎时,一道惊雷落下,柱爷的面前竟然浮现出了一本古老的黑色书籍,而书的名字竟然是“咸鱼神功”

!

翻开一看,书的第一页赫然写着:”练至大成可变身咸鱼王,掌控雷电!

看到这句话,柱爷当即决定修炼咸鱼神功!

既然是神功,也不是那么好练的,因此柱爷决定好好的规划一下自己的修炼过程!

柱爷有N

N

点心情值,而咸鱼神功则有M

M

个招式,对于每个招式,柱爷必须要消耗Ti

T

i

点心情值才能掌握,同时柱爷会获得Vi

V

i

的修炼值

那么,柱爷能够获得的最大修炼值是多少呢?

Input

第一行两个整数N

N

,M

M

,分别表示柱爷的心情点数和咸鱼神功的招式数量

接下来M

M

行,每行2

2

个整数,Ti,Vi

T

i

V

i

,分别表示学习该招式的消耗和能获得的修炼值

数据保证:

1≤N,M≤5000

1

N

M

5000

1≤Ti,Vi≤10000

1

T

i

V

i

10000

Output

输出仅一行,表示柱爷能获得的最大修炼值

Sample input and output

5 4

2 5

2 3

3 9

4 4

Sample Input Sample Output

14

水题,一道最经典的动态规划问题,和01背包完全一样。

#include <stdio.h>
#define MAXSIZE 10005
#define MAX(a, b) a > b ? a : b
int dp[5001][5001]; //dp[i][j]招式数量为i心情点数为j时最大修炼值

int main(int argc, const char * argv[])
{
    int i, j;
    int N, M;
    int T[MAXSIZE], V[MAXSIZE];

    scanf("%d %d", &N, &M);
    for (int i = 1; i <= M; i++)
    {
        scanf("%d %d", T + i, V + i);
    }

    for (i = 0; i <= M; i++)
    {
        dp[i][0] = 0;
    }
    for (i = 0; i <= N; i++)
    {
        dp[0][i] = 0;
    }

    for (i = 1; i <= M; i++)
    {
        for (j = 0; j <= N; j++)
        {
            if (j < T[i])
            {
                dp[i][j] = dp[i - 1][j];
            }
            else
            {
                dp[i][j] = MAX(dp[i - 1][j], dp[i - 1][j - T[i]] + V[i]);
            }
        }
    }

    printf("%d\n", dp[M][N]);
    return 0;
}

至于这个OJ,我想吐槽,什么破OJ,我写的C代码不小心提交成了C++,这个过了我还可以接受,谁知道,我又用C提交,竟然编译错误……第一次遇见这种窘境,但是可以肯定的是代码是对的!

时间: 2024-12-14 18:16:56

CDOJ-2016-A-柱爷与咸鱼神功的相关文章

CDOJ 1330 柱爷与远古法阵【高斯消元,卡精度】

柱爷与远古法阵 Time Limit: 125/125MS (Java/Others)     Memory Limit: 240000/240000KB (Java/Others) Submit Status 众所周知,柱爷的数学非常好,尤其擅长概率论! 某日柱爷在喵哈哈村散步,无意间踏入了远古法阵! 法阵很奇怪,是一个长度为NN的走廊,初始时柱爷在最左边,现在柱爷要到最右边去! 柱爷的行动方式如下: 每个回合柱爷会投一次骰子,根据骰子上的点数每个回合柱爷会投一次骰子,根据骰子上的点数X,柱爷

UESTC 1321 柱爷的恋爱 (区间DP)

原题地址 题意: 给定一个括号序列,问删去一个子集,得到一个非空的合法序列的方案数. 题解 题目实际上就是问给定序列中存在多少非空子集为合法序列 首先想到的是枚举分界点,dp[l][r]=sigma(dp[l][k]*dp[k+1][r],l<=k<=r),但是必然存在重复计数的情况. 考虑区间左端点的配对括号,以左端点配对的括号作为分界点,可以保证无重复同时不遗漏 dp[l][r]表示[l,r]中合法的子集数. 如果s[l]为右括号,那么dp[l][r]=dp[l+1][r] 如果s[l]为

2016 UESTC Training for Dynamic Programming

2016 UESTC Training for Dynamic Programming A - 柱爷与咸鱼神功 题意: 柱爷有n(<=5000)点心情去学m(<=5000)个招式,每个招式会得到一定的修炼值,但要消耗一定的心情,求最多的修炼值. 题解: 0.这是一个裸的背包问题,用每一个物品去更新每一种背包的状态. 1.状态定义:dp[i]表示用i点心情得到的最多修炼值. 2.状态转移:dp[i] = max{dp[i-v[j]]+w[j]} 代码: 1 2 3 4 5 6 7 8 9 10

2017,不能再咸鱼了

2017到了,回顾一下2016,基本上可以说是咸鱼的一年,没啥长进,没学啥新东西,看看2016的目标 看编译原理--没怎么看 看算法导论--没看 填坑--没填啥坑 养成良好的生活习惯--没啥好习惯 继续做软粉--动摇了 2017年新的目标是什么呢 把TinyCMips写出来 把类型和程序设计语言这本书看了 学一下MIT的PL方向的公开课 学英语 找一家优秀的实习 不能咸鱼了不能咸鱼了不能咸鱼了

Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn LCA(最近公共祖先)

C. Lorenzo Von Matterhorn time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Barney lives in NYC. NYC has infinite number of intersections numbered with positive integers starting from 1. Ther

2015长春赛区总结(其实是流水账

10月16日 呐,这是人生第一次区域赛呀!好激动好激动! 去呢,是坐火车到重庆,然后重庆坐灰机到长春. 由于火车票是16号早上9点,而且那天有CF,就直接通宵了!通宵肝了CF,涨了60分,写完题解就坐着妈妈的车,滚去火车站了= = 感谢妈妈给窝准备的N瓶水和K瓶牛奶,在机场由于是液体,就全扔了…… 火车上睡啊睡,睡啊睡,飞机上睡啊睡,睡啊睡. 下长春,晚上9点,一阵冷风吹醒,冻成傻逼辣…… 和柱爷他们会合之后,就滚去酒店睡啊睡. 10月17日 第二天 睡到11点,然后滚去东北师范的食堂吃饭辣.

iOS10 推送必看 UNNotificationContentExtension

来源:徐不同(@2016徐小爷) 链接:http://www.jianshu.com/p/45933f5450a4 大伙久等啦~这绝对是最全最详细的 UNNotificationContentExtension讲解哟~ 这篇文章中,我会给大家补充完推送内容的后续部分,希望大家看完这篇文章后,便可以轻松的玩转推送了. 1.UNNotificationContentExtension 1.1.UNNotificationContentExtension简介 简单来说,UNNotificationCo

区间DP总结

做了一些区间DP的题目,总结如下 1.Multiplication Puzzle 原题地址:http://poj.org/problem?id=1651 题意: 给定一个序列,可以依次从序列中取走除了左右两端点之外的元素,每次取走一个元素,获得该元素乘以它左右两边元素乘积的点数,求可能的最小点数 题解: 枚举区间中最后一个被取走的元素,实现区间的分割,也就是状态的转移. 详细的解题报告 2.Dire Wolf 原题地址:http://acm.split.hdu.edu.cn/showproble

第十一周 5.9 --- 5.15

哇呀哇呀,这周三门考试.........酸爽 总之希望这周的rp好一点点.. 5.9 c.柱爷的下凡 求三个硬币的面值,使得构成 1 到 n 面值得平均硬币数量最少 平均数量最少就要总数量最少,dp[i] 表示构成面额 i 需要的最少的硬币数量 然后肯定有 1 ,再枚举 另外两种硬币的面值 不过....好想说时间卡得好紧啊,都枚举到 n 会 T,打表发现面值不会超过 40,于是枚举到 40才水果 TwT/.................... 1 #include<cstdio> 2 #in