hdu 5188 zhx and contest [ 排序 + 背包 ]
zhx and contest
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 145 Accepted Submission(s): 49
One day, zhx takes part in an contest. He found the contest very easy for him.
There are n
problems in the contest. He knows that he can solve the ith
problem in ti
units of time and he can get vi
points.
As he is too powerful, the administrator is watching him. If he finishes the ith
problem before time li
, he will be considered to cheat.
zhx doesn't really want to solve all these boring problems. He only wants to get no less than w
points. You are supposed to tell him the minimal time he needs to spend while not being considered to cheat, or he is not able to get enough points.
Note that zhx can solve only one problem at the same time. And if he starts, he would keep working on it until it is solved. And then he submits his code in no time.
). Seek EOF
as the end of the file.
For each test, there are two integers n
and w
separated by a space. (1≤n≤30
, 0≤w≤109
)
Then come n lines which contain three integers ti
,v
i
,l
i
. (1≤ti
,l
i
≤10
5
,1≤v
i
≤10
9
)
1 4 7
3 6
4 1 8
6 8 10
1 5 2
2 7
10 4 1
10 2 3
8
zhx is naive!
照例,先转一发官方题解:http://bestcoder.hdu.edu.cn/
1003 zhx and contest
状态压缩动态规划。i 表示当前已经做了的题的集合。f i 表示做完集合i中的所有题的最短用时。那么转移是相当简单的。但是也要注意判断状态是否合法时总分数可能会超过int范围。
另外有一种按l 排序后折半枚举的思路。但是这种思路是错的。因为很有可能做一道结束时间靠前的题会导致时间被卡,但是它又可以放到后面再做。就像背包不能贪心一样。 如官方发题解所说,不能按照l排序,这种贪心是错误的。
但是,可以按照 l-t 排序,即如果要选该题,那么浪费少的先选(如果不选,后面也不会选了),下面就是01背包了。 还是看不懂,为何n<=30也可以状压,不是应该妥妥 TLE+MLE的节奏吗? 难道是数据弱了? 等待大神博客ing
| 13130322 | 2015-03-15 10:11:17 | Accepted | 5188 | 202MS | 14184K | 1739 B | G++ | czy |
#include <cstdio>
#include <cstring>
#include <stack>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#include <string> #define ll long long
int const N = ;
int const M = ;
int const inf = ;
ll const mod = ; using namespace std; int n,w;
int dp[N*M];
int sum;
int sumt,mal;
int ma; typedef struct
{
int t;
int v;
int l;
}PP; PP p[N]; bool cmp(PP a,PP b)
{
return a.l-a.t<b.l-b.t;
}
void ini()
{
int i;
sum=;sumt=;mal=;
for(i=;i<=n;i++){
scanf("%d%d%d",&p[i].t,&p[i].v,&p[i].l);
sum+=p[i].v;
sumt+=p[i].t;
mal=max(mal,p[i].l);
}
ma=mal+sumt;
sort(p+,p++n,cmp);
// for(i=1;i<=n;i++) printf(" i=%d t=%d v=%d l=%d\n",i,p[i].t,p[i].v,p[i].l);
} void solve()
{
if(sum<w) return;
memset(dp,,sizeof(dp));
int i,j;
for(i=;i<=n;i++){
//printf(" i=%d l=%d\n",i,p[i].l);
for(j=ma;j>=;j--){
if(j>=p[i].l){
if(j>=p[i].t)
dp[j]=max(dp[j],p[i].v+dp[ j-p[i].t ]);
}
else{
//dp[j]=dp[i-1][j];
}
//printf(" i=%d j=%d dp=%d\n",i,j,dp[j]);
}
}
} void out()
{
if(sum<w){
printf("zhx is naive!\n");
}
else{
int i;
for(i=;;i++){
if(dp[i]>=w){
printf("%d\n",i);break;
}
}
}
} int main()
{
//freopen("data.in","r",stdin);
//scanf("%d",&T);
//for(cnt=1;cnt<=T;cnt++)
while(scanf("%d%d",&n,&w)!=EOF)
{
ini();
solve();
out();
}
}
hdu 5188 zhx and contest [ 排序 + 背包 ]的更多相关文章
- HDU 5188 zhx and contest(带限制条件的 01背包)
Problem Description As one of the most powerful brushes in the world, zhx usually takes part in all ...
- HDOJ 5188 zhx and contest 贪婪+01背包
zhx and contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- hdu 5188(带限制的01背包)
zhx and contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- hdu 5187 zhx's contest [ 找规律 + 快速幂 + 快速乘法 || Java ]
传送门 zhx's contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- hdu 5187 zhx's contest (快速幂+快速乘)
zhx's contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- HDU 5187 zhx's contest 快速幂,快速加
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5187 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- HDU - 5187 zhx's contest(快速幂+快速乘法)
作为史上最强的刷子之一,zhx的老师让他给学弟(mei)们出n道题.zhx认为第i道题的难度就是i.他想要让这些题目排列起来很漂亮. zhx认为一个漂亮的序列{ai}下列两个条件均需满足. 1:a1. ...
- hdu 5187 zhx's contest
题目分析如果n=1,答案是1,否则答案是2n−2. 证明:ai肯定是最小的或者最大的.考虑另外的数,如果它们的位置定了的话,那么整个序列是唯一的. 那么ai是最小或者最大分别有2n−1种情况,而整个序 ...
- HDU - 5187 - zhx's contest (高速幂+高速乘)
zhx's contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
随机推荐
- java项目部署jar包
1. 先将打包成jar包 2. 查看所有的java进程 pgrep java 3. 杀死进程 kill -9 程序号 4.执行命令 nohup java -jar admin.jar > ...
- Boxes And Balls(三叉哈夫曼编码)
题目 原题链接:http://codeforces.com/problemset/problem/884/D 现有一堆小石子,要求按要求的数目分成N堆,分别为a1.a2....an.具体的,每次选一个 ...
- #PHP#微信支付 第二篇 JSAPI 调用统一下单接口获取预支付交易数据
上一篇讲到成功获取 openid,本篇要调用微信统一接口创建预支付交易单,并获取到相关数据,以便(后边)在微信内调起H5支付 第三步,调用微信统一下单接口创建预支付交易单 微信统一下单API是微信支付 ...
- 检查bug
用selective_search生成的坐标是(ymin,xmin,ymax,xmax),并且是从1开始的,不是从0 这是cache中的gt数据,明显看到有65535,说明很有可能是0-1变成了655 ...
- 实训day02 python
一.数据类型 列表: 定义:在[]内,可以存放多个任意类型的值,并以逗号隔开: 一般用于存放学生的爱好,课堂的周期等. 定义一个学生列表,可存放多个学生 students = ['A','B','C' ...
- _vimrc配置
set nocompatible set encoding=utf8 set guioptions-=T set number set guifont=consolas:h12 source $VIM ...
- 基于mysql数据库 关于sql优化的一些问题
mysql数据库有一个explain关键词,可以对select语句进行分析并且输出详细的select执行过程的详细信息. 对sql explain后输出几个字段: id:SELECT查询的标识符,每个 ...
- Oracle 11G RAC 修改IP
实验环境 类别 修改前 修改后 PUBLIC 172.18.4.182 rac1 192.168.56.10 rac1 172.18.4.184 rac2 192.168.56.20 rac2 PRI ...
- Ubuntu中python链接本地数据库
由于python链接数据库需要下载DB API模块:例如你需要访问Mysql数据,你需要MySQL数据库模块. DB-API是一个规范. 以便为不同的底层数据库系统和数据库接口程序提供一致的访问接口. ...
- rspec测试(使用guard自动测试和spork加速测试)配置
Gemfile文件添加rspec.guard和spork,之后执行bundle install命令 gem 'rb-readline' group :development, :test do # C ...