2165: 黄金矿工

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 86  Solved: 41
[Submit][Status][Web Board]

Description

Input

3 10

1 1 1 1

2 2 2 2

1 3 15 9

Output

3

Sample Input

Sample Output

HINT

-----sample2------

1 1 13 1
2 2 2 2
1 3 4 7

-----sample2-----

7

-----------

30%的数据,0 < T ≤ 4000

100%的数据,N ≤ 200, 0 < T ≤ 40000

解析:我们可以把在同一直线上的金矿假设为同一组,然后从第二个开始,也就是在一条直线上的次远离原点的金矿,它的价值和捕获时间就要加上在它之前的金矿,往下也是如此,这时候,就是可以变成分组背包问题。

#include<bits/stdc++.h>
using namespace std;#define e exp(1)
#define pi acos(-1)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define mem(a,b) memset(a,b,sizeof(a))
int gcd(int a,int b){return b?gcd(b,a%b):a;}const int maxn=220;
int N,T;
int dp[50000];
struct node{int x,y,t,v;
}p[maxn];int cmp(node a,node b)//斜率从小到大排序,相同则靠近原点的先排
{if(a.x*b.y==a.y*b.x)return a.y<b.y;return a.x*b.y>b.x*a.y;
}
int main()
{while(~scanf("%d%d",&N,&T)){for(int i=0; i<N; i++){scanf("%d%d%d%d",&p[i].x,&p[i].y,&p[i].t,&p[i].v);}sort(p,p+N,cmp);vector<node> ve[maxn];ve[0].push_back(p[0]);int cnt=0;node now;for(int i=1; i<N; i++){int len=ve[cnt].size();if(ve[cnt][len-1].x*p[i].y==ve[cnt][len-1].y*p[i].x){now.x=p[i].x;now.y=p[i].y;now.t=ve[cnt][len-1].t+p[i].t;now.v=ve[cnt][len-1].v+p[i].v;ve[cnt].push_back(now);}else {cnt++;now.x=p[i].x;now.y=p[i].y;now.t=p[i].t;now.v=p[i].v;ve[cnt].push_back(now);}}mem(dp,0);//分组背包模板 for(int i=0;i<=cnt;i++)for(int j=T;j>=ve[i][0].t;j--)for(int k=0;k<ve[i].size();k++)dp[j]=max(dp[j],dp[j-ve[i][k].t]+ve[i][k].v);printf("%d\n",dp[T]);}return 0;
}

zcmu2165(分组背包)相关推荐

  1. 分组背包----HDU1712 ACboy needs your help

    很简单的一道分组背包入门问题.不多解释了. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring&g ...

  2. [bzoj1025][SCOI2009]游戏 (分组背包)

    Description windy学会了一种游戏.对于1到N这N个数字,都有唯一 且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,--,N写一排在纸上.然后再在这一排下面写上它们 ...

  3. HDU 3033 I love sneakers! (分组背包变形)

    题目大意:xx去买鞋,有k种牌子,然后给出n双鞋,每双鞋有它属于的牌子.价格.收藏价值.xx认为他不差钱,要求每种鞋子买一双.但实际上他只有m毛钱,问能否买到符合xx要求的鞋,能找到的话输出最大的收藏 ...

  4. hdu 1712(分组背包)

    题意:有N个课程,然后选择M天内学习的效益最大值,注意每个课程最多选取一次. 解题思路:裸的分组背包,把每门课程看做是每一组,每一组里面最多选择一个天数,典型的分组背包.详见背包九讲 #include ...

  5. hdu 3033(分组背包)

    题意:有S款运动鞋,一个n件,总钱数为m,求不超过总钱数且每款鞋子至少买一双的情况下,使价值最大.如果 有一款买不到,就输出"Impossible". 解题思路:分组背包,和背包九 ...

  6. 2019年湘潭大学程序设计竞赛(重现赛)补题:H.Chat(分组背包)

    链接:https://ac.nowcoder.com/acm/problem/25581 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  7. P1064 金明的预算方案(分组背包)

    https://www.luogu.org/problemnew/show/P1064 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈 ...

  8. 【题解】luogu P1757 通天之分组背包

    分组背包类型 总结: 1.先循环体积,再循环每组内的物品,保证每组物品内只选一次. 若调换位置,有可能每组内物品多选了. 2.num数组记录每组有多少个物品: belong数组记录每组物品的每一个物品 ...

  9. 2020CCPC(威海) - Clock Master(数论+分组背包)

    题目大意:给出一个数字 n ,要求分解成:a[ 0 ] + a[ 1 ] + ... +  a[ m ] = n,( m 没有约束 ),使得 lcm( a[ 0 ] , a[ 1 ] , ... a[ ...

最新文章

  1. python课时费_python(课时1)
  2. window实用快捷键
  3. 前端学习(2945):首页搭建
  4. 4.docker 添加国内镜像
  5. maven的使用--初级篇
  6. [渝粤教育] 西南科技大学 行政法学与行政诉讼法学 在线考试复习资料(1)
  7. 蚂蚁算法蚁群算法-原理-思路-步骤-程序实现
  8. 【论文解读】深度学习目标检测 | R-CNN系列里程碑 | 一文弄懂Faster R-CNN
  9. Mindmanager2020教程篇画一个树状思维导图及试用密钥过期
  10. 项目需求讨论-标题栏上的搜索功能
  11. 跟着老万学linux运维-vi编辑器中的大小写转换技巧
  12. 手把手教你如何用Python从PDF文件中导出数据(附链接)
  13. ios全网通插电信卡显示无服务器,iPhone6/6 Plus全网通无法使用电信4G 苹果称将很快解决...
  14. 机器学习(三):线性模型
  15. 记录SSD训练时一个坑:FileNotFoundError
  16. php把字符串变为数组_php把字符串转为数组的方法
  17. 简单的Bat文件延迟启动特定程序
  18. 解决错误:npm install emojis-list失败
  19. OC11_Block
  20. 雇主们需要掌握什么编程语言的人才?

热门文章

  1. Lucene.Net如何实现搜索结果分类统计功能
  2. C语言补漏(1)--- char到int赋值的一个陷阱
  3. 写了一个操作XML文件的类
  4. MYsql:net start mysql 失败 发生系统错误5
  5. 常微分方程matlab求解
  6. 详解KMP算法原理,以及完整java与C++实现
  7. 1.2传值、引用、常量引用
  8. [云炬创业管理笔记]第五章打磨最有效的商业模式测试5
  9. 重磅 | AI 圣经 PRML《模式识别与机器学习》官方开源了!
  10. 3DSlicer29:Debug or Dev-170918