zcmu2165(分组背包)
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(分组背包)相关推荐
- 分组背包----HDU1712 ACboy needs your help
很简单的一道分组背包入门问题.不多解释了. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring&g ...
- [bzoj1025][SCOI2009]游戏 (分组背包)
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一 且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,--,N写一排在纸上.然后再在这一排下面写上它们 ...
- HDU 3033 I love sneakers! (分组背包变形)
题目大意:xx去买鞋,有k种牌子,然后给出n双鞋,每双鞋有它属于的牌子.价格.收藏价值.xx认为他不差钱,要求每种鞋子买一双.但实际上他只有m毛钱,问能否买到符合xx要求的鞋,能找到的话输出最大的收藏 ...
- hdu 1712(分组背包)
题意:有N个课程,然后选择M天内学习的效益最大值,注意每个课程最多选取一次. 解题思路:裸的分组背包,把每门课程看做是每一组,每一组里面最多选择一个天数,典型的分组背包.详见背包九讲 #include ...
- hdu 3033(分组背包)
题意:有S款运动鞋,一个n件,总钱数为m,求不超过总钱数且每款鞋子至少买一双的情况下,使价值最大.如果 有一款买不到,就输出"Impossible". 解题思路:分组背包,和背包九 ...
- 2019年湘潭大学程序设计竞赛(重现赛)补题:H.Chat(分组背包)
链接:https://ac.nowcoder.com/acm/problem/25581 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- P1064 金明的预算方案(分组背包)
https://www.luogu.org/problemnew/show/P1064 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈 ...
- 【题解】luogu P1757 通天之分组背包
分组背包类型 总结: 1.先循环体积,再循环每组内的物品,保证每组物品内只选一次. 若调换位置,有可能每组内物品多选了. 2.num数组记录每组有多少个物品: belong数组记录每组物品的每一个物品 ...
- 2020CCPC(威海) - Clock Master(数论+分组背包)
题目大意:给出一个数字 n ,要求分解成:a[ 0 ] + a[ 1 ] + ... + a[ m ] = n,( m 没有约束 ),使得 lcm( a[ 0 ] , a[ 1 ] , ... a[ ...
最新文章
- python课时费_python(课时1)
- window实用快捷键
- 前端学习(2945):首页搭建
- 4.docker 添加国内镜像
- maven的使用--初级篇
- [渝粤教育] 西南科技大学 行政法学与行政诉讼法学 在线考试复习资料(1)
- 蚂蚁算法蚁群算法-原理-思路-步骤-程序实现
- 【论文解读】深度学习目标检测 | R-CNN系列里程碑 | 一文弄懂Faster R-CNN
- Mindmanager2020教程篇画一个树状思维导图及试用密钥过期
- 项目需求讨论-标题栏上的搜索功能
- 跟着老万学linux运维-vi编辑器中的大小写转换技巧
- 手把手教你如何用Python从PDF文件中导出数据(附链接)
- ios全网通插电信卡显示无服务器,iPhone6/6 Plus全网通无法使用电信4G 苹果称将很快解决...
- 机器学习(三):线性模型
- 记录SSD训练时一个坑:FileNotFoundError
- php把字符串变为数组_php把字符串转为数组的方法
- 简单的Bat文件延迟启动特定程序
- 解决错误:npm install emojis-list失败
- OC11_Block
- 雇主们需要掌握什么编程语言的人才?