atcoder#073D(枚舉)
題目鏈接: http://arc073.contest.atcoder.jp/tasks/arc073_b
題意: 給出n, m兩個數, n是物品數目, m是背包容量, 接下來n行輸入, wi, vi分別爲第 i 件物品的體積和價值, 其中 w1 <= wi <= w1+3, 求背包所裝物品的最大價值;
思路: 咋一看是到01背包, 但是m爲1e9, 按一般01背包寫法時間復雜度爲O(n*m), 肯定tle;
這題和一般01背包還有一個不同的地方是 w1 <= wi <= w1+3, 那麼不難想到可以將物品根據 w 值分爲4類;
顯然可以直接枚舉每類物品取了多少個, 然後取sum(vi)最大值即爲答案;
注意:對於同類物品先取vi大的, 貪心嘛...
代碼:
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std; const int MAXN=1e2+;
ll a[MAXN], b[MAXN], c[MAXN], d[MAXN];
ll av[MAXN], bv[MAXN], cv[MAXN], dv[MAXN]; bool cmp(ll a, ll b){
return a>b;
} int main(void){
ll n, m, x, y, cnt, ans=;
int indxa=, indxb=, indxc=, indxd=;
cin >> n >> m;
cin >> x >> y;
cnt=x;
a[indxa++]=y;
for(int i=; i<n-; i++){
cin >> x >> y;
int cc=x-cnt;
if(cc==) a[indxa++]=y;
else if(cc==) b[indxb++]=y;
else if(cc==) c[indxc++]=y;
else d[indxd++]=y;
}
sort(a+, a+indxa, cmp);
sort(b+, b+indxb, cmp);
sort(c+, c+indxc, cmp);
sort(d+, d+indxd, cmp);
for(int i=; i<indxa; i++){
av[i]=av[i-]+a[i];
}
for(int i=; i<indxb; i++){
bv[i]=bv[i-]+b[i];
}
for(int i=; i<indxc; i++){
cv[i]=cv[i-]+c[i];
}
for(int i=; i<indxd; i++){
dv[i]=dv[i-]+d[i];
}
for(int i=; i<indxa; i++){
ll cnt1=i*cnt;
if(cnt1>m) break;
for(int j=; j<indxb; j++){
ll cnt2=cnt1+j*(cnt+);
if(cnt2>m) break;
for(int k=; k<indxc; k++){
ll cnt3=cnt2+k*(cnt+);
if(cnt3>m) break;
for(int l=; l<indxd; l++){
ll cnt4=cnt3+(cnt+)*l;
if(cnt4>m) break;
ll num=av[i]+bv[j]+cv[k]+dv[l];
ans=max(ans, num);
}
}
}
}
cout << ans << endl;
return ;
}
atcoder#073D(枚舉)的更多相关文章
- Asp.net attributes collection
<?xml version="1.0" encoding="utf-8"?><root> <ContralNames> ...
- Linq学习总结1--参考Linq技术详解
2个要点: 1.linq操作的集合必须实现IEnumerable接口,所以在这3.0之前为实现该接口的集合需通过Cast或TypeOf方法转换成可Linq的集合; 2.查询式和Lame那啥表达式都可以 ...
- GO語言基礎教程:數據類型,變量,常量
GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左 ...
- .Net使用微軟自帶的用戶驗證和登錄授權
使用微軟的用戶驗證,權限管理的方法 一.使用配置好的數據庫, 1.首先建立想定的數據庫(只填寫名字不加載任何表,如:Login數據庫) 2.使用vs兼容工具命令提示.如圖: 3.導入數據庫所需要的ta ...
- 正确答案 全国信息学奥林匹克联赛( ( NOIP2014) 复 赛 模拟题 Day1 长乐一中
[题目描述]小 H 与小 Y 刚刚参加完 UOIP 外卡组的初赛,就迫不及待的跑出考场对答案."吔,我的答案和你都不一样!",小 Y 说道,"我们去找神犇们问答案吧&qu ...
- C 函数指针数组
名字有点绕口,其实更应该翻译为指针函数数组. 记录下对Head-First C这一节的理解,几乎每天班车上都会咪两眼,几乎每次都是看不懂,敲一敲的时候才有些明白. 通俗点讲,这功能解决的是,具有同种签 ...
- bzoj 2818: Gcd 歐拉函數
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1633 Solved: 724[Submit][Status] Descript ...
- bzoj 1041: [HAOI2008]圆上的整点 本原勾股數組
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 853[Submit][Stat ...
- bzoj 2705: [SDOI2012]Longge的问题 歐拉函數
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1035 Solved: 669[Submit][S ...
随机推荐
- “checkbox”和“select”对象在javascript和jquery的操作差异做了整理
checkbox checkbox在javascript和jquery中选中和取消的方法 Javascript: document.getElementById("myCheck" ...
- maven的介绍和安装
一.maven简介 Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架.开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期. 在 ...
- Use Apache HBase™ when you need random, realtime read/write access to your Big Data.
Apache HBase™ is the Hadoop database, a distributed, scalable, big data store. Use Apache HBase™ whe ...
- jQuery事件函数位置放置的两种方法
jQuery 事件函数 jQuery 事件处理方法是 jQuery 中的核心函数. 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法. 通常会把 jQuery 代码放到 <head& ...
- ThinkPHP验证码不现实的处理方法
ThinkPHP测试的时候遇到验证码不显示的问题,主要解决思路如下: 1.php.ini是否开启gd库: 2.页面编码是否一致: 3.检查页面头部信息BOM,这是最主要的,把下面代码复制到根目录下,然 ...
- [zjoi]青蛙的约会_扩展欧几里德
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝着对方那里跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚 ...
- haproxy参数解析
HAProxy工作于隧道模式,其仅检查每一个连接的第一个请求, 1. option abortonclose #当服务器负载过高时,将自动关闭队列中处理时间较长的连接请求 2. option http ...
- 闪动的Label控件
带闪动效果带控件,目前只有Label,以后会逐步增加,如果有好看带效果也欢迎您带加入. 如果可能,请在github中star,您的支持是我继续完善的动力,非常感谢. 测试环境:Xcode 5.0,iO ...
- thrift编译java的问题-(安装thrift0.8.0成功-编译mapkeeper.java成功)
上一次帖子说了thrift编译java出现错误,由于只用到cpp版的,就将此略过.但是老版本的ycsb不是很好用,于是决定以locall的方式编译mapkeeper供最新版ycsb使用.目前根据 ht ...
- 记录一个读pcap数据包的软件:Fiddler
Fiddler.大神推荐的.名字老忘. 用wireshark在wifi共享精灵共享出来的无线网上抓包,发现一个SSDP(简单服务发现协议)一直在尝试找连上这个网络上的设备. 连上NEXUS4后出现了I ...