題目鏈接: 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(枚舉)的更多相关文章

  1. Asp.net attributes collection

    <?xml version="1.0" encoding="utf-8"?><root>  <ContralNames>   ...

  2. Linq学习总结1--参考Linq技术详解

    2个要点: 1.linq操作的集合必须实现IEnumerable接口,所以在这3.0之前为实现该接口的集合需通过Cast或TypeOf方法转换成可Linq的集合; 2.查询式和Lame那啥表达式都可以 ...

  3. GO語言基礎教程:數據類型,變量,常量

    GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左 ...

  4. .Net使用微軟自帶的用戶驗證和登錄授權

    使用微軟的用戶驗證,權限管理的方法 一.使用配置好的數據庫, 1.首先建立想定的數據庫(只填寫名字不加載任何表,如:Login數據庫) 2.使用vs兼容工具命令提示.如圖: 3.導入數據庫所需要的ta ...

  5. 正确答案 全国信息学奥林匹克联赛( ( NOIP2014) 复 赛 模拟题 Day1 长乐一中

    [题目描述]小 H 与小 Y 刚刚参加完 UOIP 外卡组的初赛,就迫不及待的跑出考场对答案."吔,我的答案和你都不一样!",小 Y 说道,"我们去找神犇们问答案吧&qu ...

  6. C 函数指针数组

    名字有点绕口,其实更应该翻译为指针函数数组. 记录下对Head-First C这一节的理解,几乎每天班车上都会咪两眼,几乎每次都是看不懂,敲一敲的时候才有些明白. 通俗点讲,这功能解决的是,具有同种签 ...

  7. bzoj 2818: Gcd 歐拉函數

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1633  Solved: 724[Submit][Status] Descript ...

  8. bzoj 1041: [HAOI2008]圆上的整点 本原勾股數組

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2027  Solved: 853[Submit][Stat ...

  9. bzoj 2705: [SDOI2012]Longge的问题 歐拉函數

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1035  Solved: 669[Submit][S ...

随机推荐

  1. iOS设备控制打印机输出文本

    本文转载至 http://tec.5lulu.com/detail/108krn1e6e66m8sbd.html 让我们来看看是如何实现的吧,首先要知道打印机的ip地址,然后用socket通过打印机的 ...

  2. 2016/07/11 PHP接口的介绍与实现

        接口定义了实现某种服务的一般规范,声明了所需的函数和常量,但不指定如何实现.之所以不给出实现的细节,是因为不同的实体可能需要用不同的方式来实现公共的方法定义.关键是要建立必须实现的一组一般原则 ...

  3. 【BZOJ2521】[Shoi2010]最小生成树 最小割

    [BZOJ2521][Shoi2010]最小生成树 Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算 ...

  4. TEA对称加密算法

    今天在看<Distributed Systems Concepts and Design>这本书的时候,在讲到分布式系统的安全性的时候,给出了TEA算法,书本上有现成的代码,所以摘录下来以 ...

  5. 开源流媒体服务器--EasyDarwin

    欢迎加入我们的开源流媒体服务器项目:EasyDarwin, EasyDarwin是在Apple开源流媒体服务器Darwin Streaming Server(v6.0.3)基础上进行开发和维护的免费开 ...

  6. Struts2中的OGNL表达式

    一.OGNL表达式简介 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目.所谓对象图,即以任意一个对象为根,通过OGNL可以访问 ...

  7. Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)

    Error: Package: mysql-community-server-8.0.12-1.el7.x86_64 (mysql80-community) Requires: libstdc++.s ...

  8. 一起来学linux:FTP服务器搭建

    首先安装vsftpd: apt install vsftpd有下面几个重要的配置文件:1 /etc/vsftpd.conf. 这个是vsftpd的配置文件.通过“参数=设置值”的方式来设置的. 2 / ...

  9. matlab从fig文件中提取数据

    如果你的fig文件中图像是由多条曲线绘制而成,比如说plot命令生成的,通过以下方式输出横坐标,纵坐标的取值 open('figname.fig'); lh = findall(gca, 'type' ...

  10. LR添加Windows和Linux压力机实战

    添加Windows和Linux压力机实战 既然Controller是LoadRunner的“心脏”,那么压力产生也必然是它发起的,通过压力机来对被测系统产生压力.一般压力机分为Windows和Linu ...