题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4341

题意:一个人在原点(0,0)抓金子,每块金子有一个获得需要的时间t和价值v。而且有的金子可能在一条直线上,那只能先抓近的,再抓远的。求在给定时间T下,所能获得的最大价值。

分析:将所有点按照斜率再按距离排好序后,可以把不同斜率的点当成一组,因为同一斜率的必须按照从近到远的距离拿,想要拿后面的必须花费时间拿完前面的金子。假设同一斜率的有1,2,3.想要拿3这点必须拿了1和2.所以可以将同一斜率的按照顺序加起来(即前缀和),每种斜率里至多能拿一种,这样就刚好符合分组背包了。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 40010
#define clr(a) (memset(a,0,sizeof(a)))
using namespace std;
struct node
{
int x,y,c,v;
bool operator<(const node &a)const
{
return (y*a.x<x*a.y||(y*a.x==x*a.y&&(x*x+y*y<a.x*a.x+a.y*a.y)));
}
}s[];
int n,v,num;
int dp[N];
vector<node>g[];
int judge(node a,node b)
{
return a.x*b.y==a.y*b.x;
}
int DP()
{
clr(dp,,sizeof(dp));
for(int i=;i<=num;i++)
for(int j=v;j>=;j--)
{
for(int k=,size=g[i].size();k<size;k++)
{
if(j>=g[i][k].c)dp[j]=max(dp[j],dp[j-g[i][k].c]+g[i][k].v);
}
}
return dp[v];
}
int solve()
{
num=;
for(int i=;i<n;i++)g[i].clear();
g[num].push_back(s[]);
for(int i=;i<n;i++)
{
if(judge(s[i],s[i-]))
{
s[i].c+=s[i-].c;
s[i].v+=s[i-].v;
g[num].push_back(s[i]);
}
else
{
g[++num].push_back(s[i]);
}
}
return DP();
}
int main()
{
int cas=;
while(scanf("%d%d",&n,&v)>)
{
for(int i=;i<n;i++)scanf("%d%d%d%d",&s[i].x,&s[i].y,&s[i].c,&s[i].v);
sort(s,s+n);
printf("Case %d: %d\n",cas++,solve());
}
}

hdu4341(分组背包)的更多相关文章

  1. HDU 1712 ACboy needs your help(分组背包)

    题意:给你n的课程组,每个课程组有m个课程,每个课程有一个完成时间与价值.问在m天内每组课程组最多选择一个,这样可以得到的最大价值是多少 题解:分组背包,其实就是每个课程组进行01背包,再在课程组内部 ...

  2. Codeforces Round #383 (Div. 2) D 分组背包

    给出一群女孩的重量和颜值 和她们的朋友关系 现在有一个舞台 ab是朋友 bc是朋友 ac就是朋友 给出最大承重 可以邀请这些女孩来玩 对于每一个朋友团体 全邀请or邀请一个or不邀请 问能邀请的女孩的 ...

  3. HDU 3033 分组背包变形(每种至少一个)

    I love sneakers! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDU 1712 分组背包

    ACboy needs your help Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  5. Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(分组背包+dsu)

    D. Arpa's weak amphitheater and Mehrdad's valuable Hoses Problem Description: Mehrdad wants to invit ...

  6. HDU3535AreYouBusy[混合背包 分组背包]

    AreYouBusy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. POJ1837 Balance[分组背包]

    Balance Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13717   Accepted: 8616 Descript ...

  8. Codevs1378选课[树形DP|两种做法(多叉转二叉|树形DP+分组背包)---(▼皿▼#)----^___^]

    题目描述 Description 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修 ...

  9. hdu1712 分组背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1712 题意:有n门课程,和m天时间,完成mp[i][j]得到的价值为第i行j列的数字,求最 ...

随机推荐

  1. CSS三角形制作样式

    .triangle{ display: block; height: 0; position: absolute; width: 0; border: 9px solid; border-color: ...

  2. Servlet配置对象、上下文对象、多线程问题

    一.Servlet配置对象(ServletConfig):Servlet初始化时,容器调用其init(ServletConfig)方法,传递该对象. 1.获得对象方法: (1).直接使用getServ ...

  3. Linux下mpi环境配置与执行步骤(Ubuntu为例)

    转载注明出处: http://blog.csdn.net/bendanban/article/details/9136755 以两台计算机为例,将这两台计算机应用于MPI运行环境. 第一步:在两台机器 ...

  4. linux安装Eclipse c++环境

    yum install eclipse     yum install eclipse-cdt

  5. gbs build使用说明

    注:本文从:https://source.tizen.org/documentation/articles/gbs-build 翻译而来. 1 前言 通过使用gbs build指令,开发者可以在本地编 ...

  6. C# - 使用 List<> 泛型给GridView控件数据

    创建实体模型: namespace Test.Models { public class Student { public string ID { get; set; } public string ...

  7. TControl.GetDeviceContext会给图形控件建立新的坐标原点和建立新的剪裁区域

    这是取得DC句柄的其中一种方法(会重定义原点和建立新的剪裁区): function TControl.GetDeviceContext(var WindowHandle: HWnd): HDC; be ...

  8. 手机SIM卡无法识别解决方案

    SIM卡是工作中测试用的,经常插拔到不同的手机,前两天SIM卡放到手机中都能正常识别,今天插入到另一款手机中发现无法识别.心里糟了,是不是卡坏了,根据之 前的直觉,在公司找了一块橡皮,在SIM卡的芯片 ...

  9. uva 1374 快速幂计算

    #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #i ...

  10. 怎样取消shutdown关机命令?-shutdown命令的使用解析

    机房上课,可恶电脑总是被管理员測试,不时地弹出这个关机提示.怎样取消这个关机命令呢?其有用 shutdown -a 就可以.以下来学习一下shutdown命令的使用:   shutdown这个命令预计 ...