时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

小Hi在游乐园中获得了M张奖券,这些奖券可以用来兑换奖品。

可供兑换的奖品一共有N件。第i件奖品需要Wi张奖券才能兑换到,其价值是Pi。

小Hi使用不超过M张奖券所能兑换到的最大奖品总价值是多少?

输入

第一行两个整数N,M。

接下来N行,每行两个整数Wi,Pi。

对于 50%的数据: 1≤N,M≤1000

对于 100%的数据: 1≤N,M≤105,1≤Pi,Wi≤10。

输出

一行一个整数,表示最大的价值。

样例输入
3 10
2 3
8 8
10 10
样例输出
11 
 1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<math.h>
4 int main(void){
5 int n = 0, m = 0;
6 int ret = 0;
7 scanf("%d %d", &n, &m);
8 int **array = (int**)malloc((n+1)*sizeof(int*));
9 array[0] = (int*)malloc((m+1)*sizeof(int));
10 for (int j = 0; j < m+1; j++){
11 array[0][j] = 0;
12 }
13 int **map = (int**)malloc(11*sizeof(int*));
14 for (int i = 0; i < 11; i++){
15 map[i] = (int*)calloc(11,sizeof(int));
16 }
17 int value = 0, weight = 0;
18 for (int i = 1; i < n + 1; i++){
19 scanf("%d %d", &weight, &value);
20 map[weight][value]++;
21 }
22 int count = 1;
23 for (int temp_weight = 1; temp_weight < 11; temp_weight++){
24 for (int temp_value = 1; temp_value < 11; temp_value++){
25 if (map[temp_weight][temp_value] != 0){
26 int temp = 1;
27 int temp_sum = 0;
28 while (temp_sum + temp <= map[temp_weight][temp_value]){
29 temp_sum = temp_sum + temp;
30 array[count] = (int*)malloc((m + 1)*sizeof(int));
31 array[count][0] = 0;
32 weight = temp*temp_weight;
33 value = temp*temp_value;
34 for (int j = 1; j < m + 1; j++){
35 if (j - weight<0){
36 array[count][j] = array[count - 1][j];
37 }
38 else{
39 array[count][j] = array[count - 1][j]>array[count - 1][j - weight] + value ? array[count - 1][j] : array[count - 1][j - weight] + value;
40 }
41 }
42 free(array[count - 1]);
43 count++;
44 temp = temp * 2;
45 }
46 if (map[temp_weight][temp_value] - temp_sum >0){
47 temp = map[temp_weight][temp_value] - temp_sum;
48 array[count] = (int*)malloc((m + 1)*sizeof(int));
49 array[count][0] = 0;
50 weight = temp*temp_weight;
51 value = temp*temp_value;
52 for (int j = 1; j < m + 1; j++){
53 if (j - weight<0){
54 array[count][j] = array[count - 1][j];
55 }
56 else{
57 array[count][j] = array[count - 1][j]>array[count - 1][j - weight] + value ? array[count - 1][j] : array[count - 1][j - weight] + value;
58 }
59 }
60 free(array[count - 1]);
61 count++;
62 }
63 }
64 }
65 }
66 printf("%d", array[count-1][m]);
67 return 0;
68 }

参考:https://hihocoder.com/discuss/question/5199

hiho一下 第195周 奖券兑换[C solution][Accepted]的更多相关文章

  1. 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point

    // 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point // 思路:直接暴力绝对T // 先确定x范围,每个x范围内,离圆心最远的点一定是y轴两端的点.枚举x的范围,再 ...

  2. hiho一下 第115周:网络流一•Ford-Fulkerson算法 (Edmond-Karp,Dinic,SAP)

    来看一道最大流模板水题,借这道题来学习一下最大流的几个算法. 分别用Edmond-Karp,Dinic ,SAP来实现最大流算法. 从运行结过来看明显SAP+当前弧优化+gap优化速度最快.   hi ...

  3. 【hiho一下第77周】递归-减而治之 (MS面试题:Koch Snowflake)

    本题是一道微软面试题,看起来复杂,解出来会发现其实是一个很简单的递归问题,但是这道题的递归思路是很值得我们反复推敲的. 原题为hihocoder第77周的题目. 描述 Koch Snowflake i ...

  4. hiho一下 第207周

    题目1 : The Lastest Time 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 What is latest time you can make with ...

  5. hiho一下第128周 后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  6. 【hiho一下】第一周 最长回文子串

    题目1:最长回文子串 题目原文:http://hihocoder.com/contest/hiho1/problem/1 [题目解读] 题目与 POJ 3974 palindrome 基本同样.求解最 ...

  7. Solution: 最近公共祖先·一 [hiho一下 第十三周]

    题目1 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中 ...

  8. hiho一下十六周 RMQ-ST算法

    RMQ-ST算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在美国旅行了相当长的一段时间之后,终于准备要回国啦!而在回国之前,他们准备去超市采购一些当 ...

  9. hiho一下 第九十七周 数论六·模线性方程组

    题目1 : 数论六·模线性方程组 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:今天我听到一个挺有意思的故事! 小Hi:什么故事啊? 小Ho:说秦末,刘邦的将军 ...

随机推荐

  1. 【noi 2.7_7219】复杂的整数划分问题(算法效率)

    题意:若干组数据,分别问 N划分成K个正整数之和的划分数目.N划分成若干个不同正整数之和的划分数目.N划分成若干个奇正整数之和的划分数目. 解法:请见我之前的一篇博文内的Article 2--[noi ...

  2. Codeforces Round #570 (Div. 3) E. Subsequences (easy version) (搜索,STL)

    题意:有一长度为\(n\)的字符串,要求得到\(k\)不同的它的子序列(可以是空串),每个子序列有\(|n|-|t|\)的贡献,求合法情况下的最小贡献. 题解:直接撸个爆搜找出所有子序列然后放到set ...

  3. Redis全面解析

    1.什么是Redis? Redis是BSD协议,是一个高性能的key-value非关系型数据库. 2.redis单线程问题 所谓的单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一 ...

  4. Selenium+Python之下拉菜单的定位

    1.通过selenium.webdriver.support.ui的Select进行定位 下拉菜单如下图: 定位代码(选择Male): from selenium.webdriver.support. ...

  5. MySQL5.6 与 MySQL5.7 的区别

    目录 编译安装区别 初始化的区别 其他区别 编译安装区别 # 5.7在编译安装的时候多了一个 boost 库 [root@db02 mysql-5.7.20]# yum install -y gcc ...

  6. Failed to start LSB 网络服务启动失败

    有些时候 VMare虚拟机挂起,重新运行后,XShell远程连接不上,检查VMare虚拟机,重启网卡会报错,查看日志,会有 Failed to start LSB .... CentOS7 会有一个网 ...

  7. Vue2.0 多种组件传值方法-不过如此的 Vuex

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14404397.html 在vue项目中了解组件间通讯很重要,也是最基础的面试题,可以 ...

  8. CSS 弹性盒子模型

    CSS 弹性盒子模型 https://www.w3.org/TR/2016/CR-css-flexbox-1-20160526/ CSS Flexible Box Layout Module Leve ...

  9. js currying All In One

    js currying All In One 柯里化 refs https://juejin.im/post/6844903603266650125 xgqfrms 2012-2020 www.cnb ...

  10. TypeScript with React

    TypeScript with React # Make a new directory $ mkdir react-typescript # Change to this directory wit ...