BUPT2017 wintertraining(15) #8B

题意

给出每个黄金的坐标、价值及耗时,同一方向的黄金只能依次取,求T时间内收获的最大值。

题解

同一方向,物品前缀和构成的组合,相当于是一个分组的物品。

然后分组背包:

for i:1~p个分组

for j:T~1的时间(背包容量)

for k:1~当前分组物品数

if(j>=t[k])dp[j]=max(dp[j], dp[j-t[k]]+v[k])

因为我们的t[k+1]一定大于t[k],所以else的时候可以直接break。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define N 205
using namespace std;
struct node{
int x,y,t,v;
}a[N];
int dp[40005],ans,g[N][N],cnt[N],p;
bool cmp(node a,node b){
return a.x*b.y<a.y*b.x||a.x*b.y==a.y*b.x&&a.y<b.y;
}
int main() {
int n,t,cas=0;
while(~scanf("%d%d",&n,&t)){
for(int i=1;i<=n;i++)
scanf("%d%d%d%d",&a[i].x,&a[i].y,&a[i].t,&a[i].v),
cnt[i]=0;
sort(a+1,a+1+n,cmp);
memset(dp,0,sizeof dp);
p=1;
g[p][++cnt[p]]=1;
for(int i=2;i<=n;i++)if(a[i].x*a[i-1].y==a[i].y*a[i-1].x){
a[i].v+=a[i-1].v;
a[i].t+=a[i-1].t;
g[p][++cnt[p]]=i;
}else{
p++;
g[p][++cnt[p]]=i;
}
for(int i=1;i<=p;i++)
for(int j=t;j;j--)
for(int k=1,v;k<=cnt[i];k++){
v=g[i][k];
if(j>=a[v].t)dp[j]=max(dp[j],dp[j-a[v].t]+a[v].v);
else break;
}
printf("Case %d: %d\n",++cas,dp[t]);
}
return 0;
}

【HDU - 4341】Gold miner(分组背包)的更多相关文章

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

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

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

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

  3. hdu 1561 树形dp+分组背包

    题意:就是给定n个点,每个地点有value[i]的宝物,而且有的宝物必须是另一个宝物取了才能取,问取m个点可以获得的最多宝物价值. 一个子节点就可以返回m个状态,每个状态表示容量为j(j<=m) ...

  4. 01背包(分组) HDOJ 4341 Gold miner

    题目传送门 题意:有n个金矿,每个金矿有抓取的消耗的时间和价值,矿工在原点,问在T时间内能得到的最大的价值 分析:唯一和01背包不同的是金矿可能共线,也就是抓取近的金矿后才能抓后面共线的金矿.这是分组 ...

  5. 【HDOJ】4341 Gold miner

    分组01背包.在一条直线上的点归为一组. /* 4341 */ #include <iostream> #include <sstream> #include <stri ...

  6. hdu 3033(好题,分组背包)

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

  7. hdu 4003 树形dp+分组背包 2011大连赛区网络赛C

    题意:求K个机器人从同一点出发,遍历所有点所需的最小花费 链接:点我 Sample Input 3 1 1 //3个点,从1出发,1个机器人 1 2 1 1 3 1 3 1 2 1 2 1 1 3 1 ...

  8. ACboy needs your help(HDU 1712 分组背包入门)

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

  9. HDU 4341 分组背包

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

随机推荐

  1. uva11300 分金币(中位数)

    来源:https://vjudge.net/problem/UVA-11300 题意: 有n个人围成一圈,每个人有一定数量的金币,每次只能挪动一个位置,求挪动的最少金币使他们平分金币 题解: 蓝书p6 ...

  2. semantic-ui 下拉框

    注意:在使用semantic的下拉框的时候,不仅需要引入semantic.css,还要引入semantic.js,最重要的是引入jquery.否则下拉效果不会显示. 并且,jquery必须先于sema ...

  3. 学习 yii2.0——视图之间相互包含

    布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...

  4. ~/.bashrc与/etc/profile的区别

    ~/.bashrc:该文件包含专用于某个用户的bash shell的bash信息,当该用户登录时以及每次打开新的shell时,该文件被读取. /etc/profile中设定的变量(全局)的可以作用于任 ...

  5. Zabbix appliance manual

    https://www.zabbix.com/documentation/4.0/manual/appliance If the appliance fails to start up in Hype ...

  6. java代理:静态代理和动态代理

    一.Java中有一个设计模式是代理模式 代理模式是常用的Java设计模式,特征是代理类与委托类有相同的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类 ...

  7. 【360图书馆】插入U盘自动攻击:BadUSB原理与实现

    插入U盘自动攻击:BadUSB原理与实现       漏洞背景 “BadUSB”是今年计算机安全领域的热门话题之一,该漏洞由Karsten Nohl和Jakob Lell共同发现,并在今年的Black ...

  8. Setting property 'source' to 'org.eclipse.jst.jee.server:hczm' did not find a matching property

  9. CLOUD设置过滤方案不共享

    1.打开BOS,找到应用框架-动态表单-过滤方案另存 2.找到共享给他人,把可见性全部去掉

  10. C# Note32: 查漏补缺

    (1)Using的三种使用方式 (2)C#详解值类型和引用类型区别 (3)c#中字段(field)和属性(property)的区别 (4)C#中的 int? int?:表示可空类型,就是一种特殊的值类 ...