[vijos1048]送给圣诞夜的贺卡
来源:互联网 发布:武神赵子龙辅助软件 编辑:程序博客网 时间:2024/04/30 14:12
题目←
不看数据范围一定想贪心系列…..
暴搜就可以了?然而不行….TLE…..
于是考虑减枝
题目要求价值总和最大,就按大->小排序
就从最大的选
然而仅仅这样复杂度不会降……
需要配合后缀和食用
当发现目前已选+后面待选的总和(即都选)依然比目前答案要小时,不搜
因为已经按大小排过序了,搜到较大答案的时间靠前的可能性比较大
达到减枝效果
#include<iostream>#include<cstdio>#include<algorithm>const int MAXN = 100 + 50;using namespace std;struct pingxing{ int v,num;}fry[MAXN];int cnt[MAXN];int n;int cont[MAXN][MAXN],x,y;bool cmp(pingxing a,pingxing b){ return a.v > b.v;}int ans = 0,hz[MAXN];bool used[MAXN];void dfs(int u,int sum){ if(sum + hz[u] < ans)return; if(u > n){ ans = max(ans,sum); return; } bool flag = true; int num = fry[u].num; for(int i = 1;i <= cnt[num];i ++){ if(used[cont[num][i]])flag = false; } if(flag){ used[num] = true; dfs(u + 1,sum + fry[u].v); used[num] = false; } dfs(u + 1,sum);}int main(){ scanf("%d",&n); for(int i = 1;i <= n;i ++){ scanf("%d",&fry[i].v); fry[i].num = i; } sort(fry + 1,fry + n + 1,cmp); for(int i = n;i >= 1;i --){ hz[i] = fry[i].v + hz[i + 1]; } while(cin >> x >> y){ cont[x][++cnt[x]] = y; cont[y][++cnt[y]] = x; } dfs(1,0); printf("%d",ans); return 0;}
阅读全文
0 0
- [vijos1048]送给圣诞夜的贺卡
- vijos1048——送给圣诞夜的贺卡
- 【搜索\位集合】送给圣诞夜的贺卡
- vijos 1048 送给圣诞夜的贺卡 dfs
- Vijos 1048 送给圣诞夜的贺卡(dfs)
- 送给圣诞夜的礼品
- Vijos1051. 送给圣诞夜的极光
- vijosP1049 送给圣诞夜的礼品
- vijos1049 送给圣诞夜的礼品
- vijos 1049 送给圣诞夜的礼品
- 【vijos1049】【矩阵乘法】送给圣诞夜的礼品
- vijos 1051 送给圣诞夜的极光
- Vijos 1051 送给圣诞夜的极光
- P1051送给圣诞夜的极光 RE算法
- codevs 1293 送给圣诞夜的极光
- vijos P1051 送给圣诞夜的极光
- 【宽搜】Vijos P1051 送给圣诞夜的极光
- 【codevs 1293】送给圣诞夜的极光
- spfa模板
- python-webdriver 开始第一个脚本
- 超详细的Java面试题总结之Java基本知识
- logistic Regression
- Java HashMap深浅拷贝测试及想法
- [vijos1048]送给圣诞夜的贺卡
- PHP session 存储方式
- [杂题] Codeforces #598B. Queries on a String
- 洛谷 2831 [NOIP2016] 愤怒的小鸟 状压bfs
- (转)DevOps,就是开发吃掉运维?
- 归并排序模板
- ThinkPHP搜索条件是数组,加一条自定义Sql条件解决办法
- 第二讲 算法思想的发展历程
- 可视化实例(一)