Codeforces Round #383 (Div. 2) D 分组背包
给出一群女孩的重量和颜值 和她们的朋友关系 现在有一个舞台 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 分组背包的更多相关文章
- 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 题解 直接 ...
- 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 ...
- 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 ...
- Codeforces Round #383(div 2)
A.快速幂 B. 题意:求ai^aj=x的数对个数,x和a[]给定 分析:a^b=c,则a^c=b,所以求ai^x=aj的个数,枚举一遍即可 C. 题意:给你一个有向图,每个点的出边只有一条,求最小的 ...
- 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 ...
- 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 而且如果邀请 ...
- 01背包dp+并查集 Codeforces Round #383 (Div. 2)
http://codeforces.com/contest/742/problem/D 题目大意:有n个人,每个人有重量wi和魅力值bi.然后又有m对朋友关系,朋友关系是传递的,如果a和b是朋友,b和 ...
- Codeforces Round #383 Div 1题解
第一次打Div 1,感觉还是挺难的..把基础题打完就日常划水了.... [A. Arpa's loud Owf and Mehrdad's evil plan](http://codeforces.c ...
- 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 ...
随机推荐
- Java NIO 系列教程
http://www.iteye.com/magazines/132-Java-NIO
- poj 1192
此题亦一眼看出算法,一次AC. 没什么好讲的,就是一个普通的树形动规. 用dp[n][0]表示n号顶点不取时的最大值,dp[n][1]表示n号顶点取时的最大值. dp[n][0]=max{dp[x][ ...
- 按Enter键执行表单验证
document.onkeydown = function(evt){ var evt = window.event?window.event:evt; if (evt.keyCode==13) { ...
- R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记(转)
https://ask.julyedu.com/question/7490 labelImg:https://github.com/tzutalin/labelImg
- oracle插入数据时解决和旧数据id的冲突
我们在使用oracle创建一个主键的时候需要让他自增, 但是他跟mysql不同,需要创建序列,具体看下面: 可以删除之前创建的sequence,我们在重新创建一个: DROP SEQUENCE SJG ...
- 红黑树/B+树/AVL树
RB Tree 红黑树 :http://blog.csdn.net/very_2/article/details/5722682 Nginx的RBTree实现 :http://blog.csdn ...
- 设置UITableView的separatorInset值为UIEdgeInsetsZero,分隔线不最左端显示的问题
一.问题描述 UITableView分割线要显示到最左端 查看UITableView的属性,发现设置separatorInset的值可以自定义分割线的位置. @property (nonatomic) ...
- 【python】点分十进制ip与数字互转
来源:http://www.cnblogs.com/vovlie/archive/2012/10/17/2727029.html 利用lambda表达式,非常简洁 int_to_ip = lambda ...
- python学习笔记(1)
python简介 python是Guido van Rossum在圣诞节打发无聊的时间时候写出来的语言. python是解释性的语言. python是动态类型的语言. python是强类型定义语言(高 ...
- 简单理解Socket
题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...