分组背包而已。注意的是,每个时间T,要把一组的全加进去比较一次。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define N 205
#define T 41000 using namespace std; int dp[T];
struct node{
int x,y;
int t,v;
}Node[N];
struct zu{
int t,v;
zu(int tt,int vv){
t=tt; v=vv;
}
};
vector<zu>pts[N]; bool cmp(node a,node b){
if(a.x*b.y-a.y*b.x>0)
return true;
else if(a.x*b.y-a.y*b.x==0){
if(a.x*a.x+a.y*a.y<b.x*b.x+b.y*b.y)
return true;
}
return false;
} int main(){
int n,t,kase=0;
while(scanf("%d%d",&n,&t)!=EOF){
for(int i=0;i<n;i++){
scanf("%d%d%d%d",&Node[i].x,&Node[i].y,&Node[i].t,&Node[i].v);
pts[i].clear();
}
pts[n].clear();
sort(Node,Node+n,cmp);
int al=1;
pts[al].push_back(zu(Node[0].t,Node[0].v));
for(int i=1;i<n;i++){
if(Node[i].x*Node[i-1].y-Node[i].y*Node[i-1].x!=0)
al++;
pts[al].push_back(zu(Node[i].t,Node[i].v));
}
for(int i=1;i<=al;i++){
int size=pts[i].size();
for(int k=1;k<size;k++){
pts[i][k].t+=pts[i][k-1].t;
pts[i][k].v+=pts[i][k-1].v;
}
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=al;i++){
int size=pts[i].size();
for(int p=t;p>=0;p--)
for(int k=0;k<size;k++){
if(p-pts[i][k].t<0) break;
dp[p]=max(dp[p],dp[p-pts[i][k].t]+pts[i][k].v);
}
}
printf("Case %d: %d\n",++kase,dp[t]);
}
return 0;
}

  

HDU 4341的更多相关文章

  1. HDU 4341 分组背包

    B - Gold miner Time Limit:2000MS      Memory Limit:32768KB     Description Homelesser likes playing ...

  2. 【HDU - 4341】Gold miner(分组背包)

    BUPT2017 wintertraining(15) #8B 题意 给出每个黄金的坐标.价值及耗时,同一方向的黄金只能依次取,求T时间内收获的最大值. 题解 同一方向,物品前缀和构成的组合,相当于是 ...

  3. HDU 4341 Gold miner (分组背包)

    先把线按照距离原点的距离排序,然后用叉积把在同一条直线上的点放在一起, 把在同一条线上的点中的前i个点当成一个点就转化成了分组背包. 写if(kas++) putchar('\n') 居然PE了,PE ...

  4. HDU 4341 Gold miner(分组背包)

    题目链接 Gold miner 目标是要在规定时间内获得的价值总和要尽可能大. 我们先用并查集把斜率相同的物品分在同一个组. 这些组里的物品按照y坐标的大小升序排序. 如果组内的一个物品被选取了,那该 ...

  5. 2012 #5 Gold miner

    Gold miner Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  8. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  9. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

随机推荐

  1. graphviz.js的图形及属性简单用法

    digraph A { graph[bgcolor="cadetblue" label="图的标题" fontsize=48 fontcolor="g ...

  2. bzoj5029: 贴小广告&&bzoj5168: [HAOI2014]贴海报

    以后做双精题请至少先跑个数据...输入都不一样... 做法就是离散化大力线段树. 记得在x+1和y-1插点 看这个数据: 1000 121 10050 8080 9950 981 56100 2002 ...

  3. Linux - Nginx的集群与负载均衡

    Nginx的集群与负载均衡 集群就是一群人干同样的活,负载均衡就是保证每个人都干得差不多.或者大人干得多一些,小孩干得少一些. Nginx实现负载均衡很方便. 准备三台服务器,一台是用于访问图片(66 ...

  4. gcc 4.8安装

    suse的安装参考:http://blog.csdn.net/cloudskyfhx/article/details/17660607 有些错误处理见本文黄色部分 CentOS 6.4 编译安装 gc ...

  5. 【POJ 4007】 Flood-it!

    [题目链接] http://poj.org/problem?id=4007 [算法] IDA* [代码] #include <algorithm> #include <bitset& ...

  6. BZOJ-4706 B君的多边形 OEIS

    题面 题意:有一个正n多边形,我们要连接一些对角线,把这个多边形分成若干个区域,要求连接的对角线不能相交,每个点可以连出也可以不连出对角线,即最终不要求所有区域均为三角形,问总方案数mod (10^9 ...

  7. Java中的命名规范到底是怎样的

    内容摘要:命名规范二,java中的方法名,对象名和字段名的第一个单词的首写字母应该小写,而后面的每个单词的首字母都应该小写 要想将java基础学的十分的牢固就必须将java中的命名规范掌握好了.俗话说 ...

  8. c语言return与exit的区别

    2013-09-0918:54:33 exit函数在头文件stdlib.h中,函数原型: void exit(int status); exit(0) 正常运行程序并退出程序. exit(1) 非正常 ...

  9. node.js date-utils

    前端引用 <script type="text/javascript" src="date-utils.min.js"></script> ...

  10. c++中的while(cin)问题

    xp系统中利用dev-cpp进行编程,语句while(cin>>str),str是个string类型,在一行中输入几个string,末位加个ctrl+z,输入没有结束,除非出入换行后,再输 ...