題目鏈接: 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. sql server t-sql脚本转成oracle plsql

    将一份SQL SERVER数据库生成的T-SQL脚本,转成ORACLE的PL/SQL,其复杂繁琐程度,远远出乎我的意料. 这份SQL SERVER脚本,里面有表,有视图,还有存储过程,以及一些自定义函 ...

  2. opencv中的子库

    1 FLANN 近似最近邻库,NN就是nearest neighbor的缩写. 2 IlmImf Ilm是Industrial light & magic公司的缩写. Imf是image fo ...

  3. 清理yum 缓存

    两条命令 yum clean all 以及 rm -rf /var/cache/yum/* 如何有效的清理yum缓存 - CSDN博客 https://blog.csdn.net/nsrainbow/ ...

  4. Boost 库编译总结

    1. 下载boost库源码,解压缩. 2. 打开vs2010 工具栏tools 下的visual studio command prompt,运行源码目录下的bootstrap.bat,生成bjam. ...

  5. 代码空间项目 -- InstantiationException的异常

    java.lang.InstantiationException实例化异常.当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常. 这次项目中查询type时 ...

  6. UITextInputMode类的使用

    转载请注明:http://blog.sina.com.cn/s/blog_69081e060100v7ad.html   UITextInputMode大家看了是不是有些陌生呢?这个类是在4.2之后才 ...

  7. Oracle查询正在执行的SQL语句

    查看 Oracle 正在执行的 sql 语句以及发起的用户 SELECT b.sid oracleID, b.username 用户名, b.serial#, paddr, sql_text 正在执行 ...

  8. Backbone vs AngularJS

    首先 Backbone 没有 AngularJS 那么容易上手. 而且作者并没有想让Backbone草根化的意思. Backbone 比喻成战斗机. 看上去更像是真正的MVC框架, model-vie ...

  9. iOS7默认状态栏文字颜色为黑色,项目需要修改为白色。

    1在Info.plist中设置UIViewControllerBasedStatusBarAppearance 为NO2 在需要改变状态栏颜色的 AppDelegate中在 didFinishLaun ...

  10. 英语发音规则---gh

    英语发音规则---gh 一.总结 一句话总结:gh字母组合的读音在中学英语课本中归纳起来主要有"发音"和"不发音"两种情况. gh字词首是发/g/,因为需要开头 ...