给出一群女孩的重量和颜值 和她们的朋友关系 现在有一个舞台 ab是朋友 bc是朋友 ac就是朋友 给出最大承重 可以邀请这些女孩来玩

对于每一个朋友团体 全邀请or邀请一个or不邀请 问能邀请的女孩的最大颜值

比赛的时候一看就是个背包问题 似乎在背包九讲上面见过..但是不会写

于是百度.."背包 一类选一个"

百度出了分组背包 并且第一个搜索结果就是类似于原题的东西..

只不过分组背包的模板是一个or不要 加了个bfs 把朋友团体作为一个新朋友加入进这个团体 改了改代码..就a了..

虽然fst掉了c...

后来学习了一下 发现分组背包是这样写的

for(int i=1;i<=n;i++)枚举每一个分组

for(int j=V;j>=0;j++)枚举背包容量

for(int k=1;k<=x;k++)枚举i分组里面的所有物品

dp[j] = max(dp[j],dp[j-vol[k]]+val[k]);

当然二维的比较好理解...

在这个题中 并查集和bfs统计朋友团体都可以

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<vector>
#include<queue>
#include<malloc.h>
using namespace std;
#define L long long
vector<int >q[1050];
int val[2050];
int vol[2050];
int dp[1050];
int n,m,w;
int id[1050];
vector<int >z[1050];
void bfs(int u,int cnt){
int sumval = 0;
int sumvol = 0;
queue<int>que;
que.push(u);
id[u] = cnt;
sumval += val[u];
sumvol += vol[u];
z[cnt].push_back(u);
while(!que.empty()){
int f=que.front();que.pop();
for(int i=0;i<q[f].size();i++){
int v=q[f][i];
if(id[v] == -1){
z[cnt].push_back(v);
sumval += val[v];
sumvol += vol[v];
id[v] = cnt;
que.push(v);
}
}
}
val[cnt + n] = sumval;
vol[cnt + n] = sumvol;
z[cnt].push_back(n + cnt);
}
int main(){
scanf("%d%d%d",&n,&m,&w);
for(int i=1;i<=n;i++)scanf("%d",&vol[i]);
for(int i=1;i<=n;i++)scanf("%d",&val[i]);
for(int i=1;i<=n;i++)q[i].clear();
memset(id,-1,sizeof(id));
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
q[u].push_back(v);
q[v].push_back(u);
}
int cnt = 0;
for(int i=1;i<=n;i++){
if(id[i] == -1){
cnt ++;
z[cnt].clear();
bfs(i,cnt);
}
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=cnt;i++){
for(int j=w;j>=0;j--){
for(int k=0;k<z[i].size();k++){
int d=z[i][k];
if(j>=vol[d]){
if(dp[j]<dp[j-vol[d]]+val[d]){
dp[j]=dp[j-vol[d]]+val[d];
}
}
}
}
}
printf("%d\n",dp[w]);
}

  

Codeforces Round #383 (Div. 2) D 分组背包的更多相关文章

  1. Codeforces Round #383 (Div. 2) 题解【ABCDE】

    Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...

  2. Codeforces Round #383 (Div. 2) A,B,C,D 循环节,标记,暴力,并查集+分组背包

    A. Arpa’s hard exam and Mehrdad’s naive cheat time limit per test 1 second memory limit per test 256 ...

  3. Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(分组背包+dsu)

    D. Arpa's weak amphitheater and Mehrdad's valuable Hoses Problem Description: Mehrdad wants to invit ...

  4. Codeforces Round #383(div 2)

    A.快速幂 B. 题意:求ai^aj=x的数对个数,x和a[]给定 分析:a^b=c,则a^c=b,所以求ai^x=aj的个数,枚举一遍即可 C. 题意:给你一个有向图,每个点的出边只有一条,求最小的 ...

  5. Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses —— DP(01背包)

    题目链接:http://codeforces.com/contest/742/problem/D D. Arpa's weak amphitheater and Mehrdad's valuable ...

  6. Codeforces Round #383 (Div. 2)D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(dp背包+并查集)

    题目链接 :http://codeforces.com/contest/742/problem/D 题意:给你n个女人的信息重量w和美丽度b,再给你m个关系,要求邀请的女人总重量不超过w 而且如果邀请 ...

  7. 01背包dp+并查集 Codeforces Round #383 (Div. 2)

    http://codeforces.com/contest/742/problem/D 题目大意:有n个人,每个人有重量wi和魅力值bi.然后又有m对朋友关系,朋友关系是传递的,如果a和b是朋友,b和 ...

  8. Codeforces Round #383 Div 1题解

    第一次打Div 1,感觉还是挺难的..把基础题打完就日常划水了.... [A. Arpa's loud Owf and Mehrdad's evil plan](http://codeforces.c ...

  9. Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan —— DFS找环

    题目链接:http://codeforces.com/contest/742/problem/C C. Arpa's loud Owf and Mehrdad's evil plan time lim ...

随机推荐

  1. ASP.NET Core--基于授权的视图

    翻译如下: 开发人员通常希望基于当前用户身份显示,隐藏或以其他方式修改UI. 您可以通过依赖注入访问MVC视图中的授权服务. 将授权服务注入Razor视图,请使用@inject指令,例如: @inje ...

  2. sql 获取一批指定范围且不重复的随机数

    declare @M int,@N int set @m=10 set @n=1 select top 10 cast(rand(checksum(newid()))*(@M-@N)+@n as in ...

  3. 耿丹CS16-2班第一次作业汇总

    第一次作业统计完成. 注:1.作业顺序:取最早交作业的前3名,依次拿5,2,1分,前提是作业质量较高,否则轮至下一名同学得分,其余同学得0分:2.作业情况:满10分,空一题扣2分,心得写得好的有额外加 ...

  4. SQLAchemy

    SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果.

  5. java学习第三天 数组

    java中数组一样存在多维,二维数组,三维数组..... 二维数组的定义  格式: 数据类型 [][] 数组名 = new 数据类型 [][]; 动态初始化 数据类型[][] 数组名 =  new 数 ...

  6. qt 标准对话框

    if (QMessageBox::Yes == QMessageBox::question(this, tr("Question"),                        ...

  7. 创建新用户,连接Oracle数据库

    1.sys用户是最高管理员用户,那我们就用这个sys用户登录oracle:

  8. Schwarz积分公式

    设$f\in H(B(0,R))\cap C(\overline{B(0,R)})$,且$f=u+iv$,则$f$可用其实部表示为 $$f(z)=\frac{1}{2\pi}\int_{0}^{2\p ...

  9. nginx 配置https upstream 跳转失败

    访问首页没问题,但是在登录跳转重定向时域名被修改成upstream的名字 如果需要跳转的话会出现下面的情况: http://test-xxx-emove_pools/beehive/index ser ...

  10. 【Java EE 学习 16 下】【dbutils的使用方法】

    一.为什么要使用dbutils 使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高 二.dbutils下载地址 http://commons.apache.org/proper/ ...