P1776 宝物筛选_NOI导刊2010提高(02)(背包的二进制优化)
2017-07-17 20:48
302 查看
题目描述
终于,破解了千年的难题。小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎。但是这里的宝物实在是太多了,小FF的采集车似乎装不下那么多宝物。看来小FF只能含泪舍弃其中的一部分宝物了……小FF对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件。他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小FF有一个最大载重为W的采集车,洞穴里总共有n种宝物,每种宝物的价值为v[i],重量为w[i],每种宝物有m[i]件。小FF希望在采集车不超载的前提下,选择一些宝物装进采集车,使得它们的价值和最大。输入输出格式
输入格式:第一行为一个整数N和w,分别表示宝物种数和采集车的最大载重。
接下来n行每行三个整数,其中第i行第一个数表示第i类品价值,第二个整数表示一件该类物品的重量,第三个整数为该类物品数量。
输出格式:
输出仅一个整数ans,表示在采集车不超载的情况下收集的宝物的最大价值。
输入输出样例
输入样例#1:4 20 3 9 3 5 9 1 9 4 2 8 1 3
输出样例#1:
47
说明
对于30%的数据:n≤∑m[i]≤10^4;0≤W≤10^3。对于100%的数据:n≤∑m[i]≤10^5;
0 <w≤4*10^4:1≤n<100。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define lli long long int using namespace std; const int MAXN=100001; const int maxn=0x3f; void read(int &n) { char c='+';int x=0;bool flag=0; while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;} while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+c-48,c=getchar(); flag==1?n=-x:n=x; } int n,m; struct node { int va,we,num; }a[MAXN]; int dp[MAXN]; int main() { read(n);read(m); for(int i=1;i<=n;i++) { read(a[i].va); read(a[i].we); read(a[i].num); } for(int i=1;i<=n;i++) { int left=(a[i].num); for(int k=1;left;k<<=1) { if(k>left) k=left; left-=k; int w=a[i].we*k; int v=a[i].va*k; for(int j=m;j>=w;j--) dp[j]=max(dp[j],dp[j-w]+v); } } printf("%d",dp[m]); return 0; }
相关文章推荐
- 洛谷P1776 宝物筛选_NOI导刊2010提高(02)(多重背包,单调队列)
- 洛谷P1776 宝物筛选_NOI导刊2010提高(02)
- 洛谷P1776 宝物筛选_NOI导刊2010提高(02)
- 洛谷 P1776 宝物筛选_NOI导刊2010提高(02)
- 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)
- 洛谷 P1774 最接近神的人_NOI导刊2010提高(02)
- [luoguP1773] 符文之语_NOI导刊2010提高(02)(DP)
- P1774 最接近神的人_NOI导刊2010提高(02)
- luoguP1774 最接近神的人_NOI导刊2010提高(02)x
- 洛谷——P1774 最接近神的人_NOI导刊2010提高(02)
- 洛谷P1774 最接近神的人_NOI导刊2010提高(02) [2017年6月计划 线段树03]
- luogu P1774 最接近神的人_NOI导刊2010提高(02)
- P1774 最接近神的人_NOI导刊2010提高(02)
- 洛谷P1774 最接近神的人_NOI导刊2010提高(02)(求逆序对)
- P1807 最长路_NOI导刊2010提高(07)
- P1801 黑匣子_NOI导刊2010提高(06)
- Spfa【P1813】拯救小tim_NOI导刊2011提高(02)
- 洛谷P1801 黑匣子_NOI导刊2010提高(06)
- 刷题记录-luoguP1801 黑匣子_NOI导刊2010提高(06)
- 洛谷P1801 黑匣子_NOI导刊2010提高(06)