1279: 简单的背包问题

时间限制: 1 秒  内存限制: 32 MB
提交: 361  解决: 20

题目描述

相信大家都学过背包问题了吧,那么现在我就考大家一个问题。有n个物品,每个物品有它的重量w,价值v,现在有一个容量为W的背包,问你在不超过背包容量的情况下,能装下的物品的最大价值是多少。

T <= 100代表样例数
1 <= n <= 100 物品数
1 <= W <= 100000 背包的容量
1 <= wi <= 100000 每个物品的重量
对于每个i=2,3,…,N, w1 ≤ wi ≤ w1+3.
1 <= vi <= 100000 每个物品的价值

输入

输入格式:

T
n W
w1 v1
w2 v2
:
wn vn

输出

输出占一行,代表最大能装下物品的价值。

样例输入

2
4 6
2 1
3 4
4 10
3 4
4 6
2 1
3 7
4 10
3 6

样例输出

11
13
由于BC卡的我到死,A题数据描述没仔细看,后来才发现只有四种不同的重量的物品。剩下的无非是对于从四种不同重量的物品中每样挑出若干件的排列组合,四重for循环即可,由于使得价值最大化,所以每次都将优先选出当前重量级物品中的价值最大的几件,预处理一下前缀和即可。
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 bool cmp(int a,int b){return a>b;}
 4 int main()
 5 {
 6     //freopen("in.txt","r",stdin);
 7     int dp[4][444];
 8     int W,n,w,i,t,j,p,k,s;
 9     cin>>t;
10     while(t--){int a=0,b=0,c=0,d=0,wi,vi;
11     dp[0][0]=dp[1][0]=dp[2][0]=dp[3][0]=0;
12         cin>>n>>W;
13         scanf("%d%d",&w,&vi);
14         dp[0][++a]=vi;
15         for(i=2;i<=n;++i){
16             scanf("%d%d",&wi,&vi);
17             if(wi==w){
18                 dp[0][++a]=vi;
19             }
20             else if(wi==w+1){
21                 dp[1][++b]=vi;
22             }
23             else if(wi==w+2){
24             }
25             else if(wi==w+3){
26                 dp[3][++d]=vi;
27             }
28         }
29         sort(dp[0]+1,dp[0]+1+a,cmp);
30         sort(dp[1]+1,dp[1]+1+b,cmp);
31         sort(dp[2]+1,dp[2]+1+c,cmp);
32         sort(dp[3]+1,dp[3]+1+d,cmp);
33         for(i=1;i<=a;++i) dp[0][i]+=dp[0][i-1];
34         for(i=1;i<=b;++i) dp[1][i]+=dp[1][i-1];
35         for(i=1;i<=c;++i) dp[2][i]+=dp[2][i-1];
36         for(i=1;i<=d;++i) dp[3][i]+=dp[3][i-1];
37         int ans=0;
38         for(i=0;i<=a;++i)
39             for(j=0;j<=b;++j)
40                for(k=0;k<=c;++k)
41                   for(p=0;p<=d;++p)
42         if((i+j+k+p)*w+j+2*k+3*p<=W)
43             ans=max(ans,dp[0][i]+dp[1][j]+dp[2][k]+dp[3][p]);
44         cout<<ans<<endl;
45     }
46     return 0;
47 }


转载于:https://www.cnblogs.com/zzqc/p/7287265.html

河南省多校联盟二-A相关推荐

  1. 河南省多校联盟二-C

    1281: 邪能炸弹 时间限制: 1 秒  内存限制: 128 MB 提交: 222  解决: 80 题目描述 正在入侵艾泽拉斯的古尔丹偶然间得到了一颗邪能炸弹,经过研究,他发现这是一颗威力极其巨大且 ...

  2. 河南省多校联盟二-F 线段树+矩阵

    ---恢复内容开始--- 1284: SP教数学 时间限制: 2 秒  内存限制: 128 MB 提交: 24  解决: 4 题目描述 输入 输出 对于每组数据的2操作,输出一行对1e9 + 7取模的 ...

  3. 哈希计划(河南省多校联盟第六次)

    众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩<金庸群侠传X>,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟 ...

  4. 2017.12.10《“剑锋OI”普及组多校联盟系列赛(14)#Sooke#Kornal 的课余时间 》分析报告

    报告内容如下 - - [导语] ------ 太晚了,时间也紧,一切尽量从简吧 PS:本文题目来自剑锋OI 所以废话也不多说,进入正题吧,代码直接跟在题目后边儿,主要分析在代码前,次要的就写在代码后面 ...

  5. 中国大学985/211表、九校联盟C9

    参考: 维基百科 : 211工程 维基百科 :985工程 维基百科 :世界一流大学和一流学科建设 九校联盟 九校联盟(英文:C9 League 或者China 9),简称C9或者C9联盟, 中国九校联 ...

  6. 2017.12.10《“剑锋OI”普及组多校联盟系列赛(14)#Sooke#Kornal 的课余时间 》分析报告...

    报告内容如下 - - [导语] ------ 太晚了,时间也紧,一切尽量从简吧 PS:本文题目来自剑锋OI 所以废话也不多说,进入正题吧,代码直接跟在题目后边儿,主要分析在代码前,次要的就写在代码后面 ...

  7. 【五校联盟集训】DAY 1

    Contest2331 - 2022年"5校联盟"蓝桥杯软件大赛训练赛1 - BUCTOJ E 题目 活动 - AcWing 解释 用到埃氏筛选法对1~1e6+10的数字进行了预处 ...

  8. zzuli 2177 Contest - 河南省多校连萌(四)(简单题)

    Contest - 河南省多校连萌(四) Problem F: 小姐姐的忠告:少吃辣条多刷题 题目链接 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1 ...

  9. 2020 多校联盟(第一场)

    2020 HDU多校联盟第一场 1004:Distinct Sub-palindromes 思路:我们通过观察可以得到当时 ,所有字符串的所有子回文串的个数都是n 当 时,每中情况都有如下所示,最小有 ...

最新文章

  1. .NET企业级应用架构设计系列之应用服务器
  2. Windows API一日一练(1)第一个应用程序
  3. mysql稠化报表_使用Partitioned Outer Join实现稠化报表
  4. 【数据结构与算法】之深入解析“安装栅栏”的求解思路与算法示例
  5. 洛谷 - P2617 Dynamic Rankings(树状数组套主席树)
  6. Python入门笔记之闭包
  7. linux 格式化 目录,Linux 磁盘分区、格式化、目录挂载
  8. pycharm运行模型时怎么设置权重?_使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型...
  9. NVelocity系列:NVelocity配置详解
  10. [LeetCode]题解(python):012-Integer to Roman
  11. 7年,我从功能测试到测试开发,写给即将进入或者正在做测试的你...
  12. Linux-c对一个十六进制数的某一位取反
  13. spring通用获取ioc容器中配置的bean的工具类
  14. iframe父页面和子页面高度自适应
  15. 2021最新十大无码工具
  16. Python字符串逆序输出
  17. odb格式Linux,ODB格式文件 如何打开ODB文件 ODB是什么格式的文件 用什么打开 - The X 在线工具...
  18. redis集群搭建管理入门
  19. 如何把kafka Log4j1.x升级到Log4j2.x ?
  20. word使用学习总结

热门文章

  1. autocad.net将Geometry对象转换为Database对象
  2. 家用漏电保护器过流跳闸与漏电跳闸的检查方法
  3. OpenSIPS Cluster + CLB在腾讯云部署的坑(从尝试到放弃)
  4. C#高效编程--改进C#代码的50个行之有效的办法笔记
  5. 前端使用sm2、sm3加密解密 案例
  6. Tuxera NTFS Mac2022mac写入ntfs移动硬盘插件
  7. informatica笔记
  8. 广告和游戏广告变现全面解析
  9. 使用python读取网络视频流或者本地视频进行RTMP流的生成,并对视频源的每一帧做剪切处理
  10. 面试复试重点 算法与数据结构