P1757 通天之分组背包
背包中的经典问题,我竟然不知道。
分组背包
就是每个物品有一个所属的小组,小组内的物品会冲突。
就是把01背包中的两个for换一下位置
01:
for(i,1,kind)
for(j,v,w[i])
分组背包
for(j,v,w[i])
for(i,1,kind)

 #include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstring>
#define inf 2147483647
#define For(i,a,b) for(register int i=a;i<=b;i++)
#define p(a) putchar(a)
#define g() getchar()
//by war
//2017.10.17
using namespace std;
int n,m,x,y,z;
struct bag
{
int cnt;
int v[];
int w[];
}a[];
int f[];
bool b[];
int kind;
int ans;
void in(int &x)
{
int y=;
char c=g();x=;
while(c<''||c>'')
{
if(c=='-')
y=-;
c=g();
}
while(c<=''&&c>='')x=x*+c-'',c=g();
x*=y;
}
void o(int x)
{
if(x<)
{
p('-');
x=-x;
}
if(x>)o(x/);
p(x%+'');
}
int main()
{
in(m),in(n);
For(i,,n)
{
in(x),in(y),in(z);
if(!b[z])
{
kind++;
b[z]=true;
}
a[z].cnt++;
a[z].v[a[z].cnt]=y;
a[z].w[a[z].cnt]=x;
}
For(i,,kind)
{
for(int t=m;t>=;t--)
For(j,,a[i].cnt)
if(t>=a[i].w[j])
f[t]=max(f[t],f[t-a[i].w[j]]+a[i].v[j]);
}
o(f[m]);
return ;
}

最新文章

  1. Android知识点总结[转]
  2. hdu5452 Minimum Cut
  3. iOS 二维数组排序小算法
  4. ExtJs Column 显示文字内容过长 使用Tootip显示全部内容
  5. 跨过slf4j和logback,直接晋级log4j 2
  6. 浅谈SqlCommand
  7. 在C51中如何实现软复位?
  8. Ajax请求ashx返回各类数据的常见处理方式
  9. cmd dos 下 无法显示中文
  10. 支付平台程序,支付程序,网络pos程序,api接口程序,锋锐支付平台程序开发领导者!
  11. 多元线性相关Matlab代码
  12. adb not responding. if you&#39;d like to
  13. drf序列化组件
  14. Linux本地yum源配置以及使用yum源安装gcc编译环境
  15. Go基础系列:接口类型断言和type-switch
  16. Android应用系列:双击返回键退出程序
  17. Numbers
  18. Facebook Login api
  19. Recover Binary Search Tree,恢复二叉排序树
  20. 阿里云服务器内部dns可能出错

热门文章

  1. linux运维之分析日志相关命令(1)
  2. 2019.3.12考试&amp;2019.3.13考试&amp;ESTR
  3. C++并发编程实战---阅读笔记
  4. 《剑指offer》— JavaScript(26)二叉搜索树与双向链表
  5. Andrew Ng机器学习课程,第一周作业,python版本
  6. webService与分布式与微服务与SOA的关系
  7. 【hihocoder】二分&#183;归并排序之逆序对
  8. docker mysql authentication_string client does not support authentication 连接问题
  9. Spring RedisTemplate操作-HyperLogLog操作(7)
  10. spring框架学习(一)入门