Codeforces Round #321 (Div. 2)
/************************************************
* Author :Running_Time
* Created Time :2015/9/23 星期三 00:19:33
* File Name :A.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
int a[N]; int main(void) {
int n; scanf ("%d", &n);
for (int i=1; i<=n; ++i) {
scanf ("%d", &a[i]);
}
int l = 1;
int ans = 1; int pre = a[1];
for (int i=2; i<=n; ++i) {
if (a[i] >= pre) {
pre = a[i]; ans = max (ans, i - l + 1);
}
else {
pre = a[i]; l = i;
}
}
printf ("%d\n", ans); return 0;
}
题意:每个朋友有他的金钱和友好程度,从朋友中选取一些人,问在贫富差距小于d的最大友好程度和为多少
分析:先按照m金钱从小到大排序,枚举每个起点看以这个人为最穷的人能得到的最大友好程度多少,然后是第二穷的人。。。。。复杂度O (nlogn),尺取法也叫two points ?
/************************************************
* Author :Running_Time
* Created Time :2015/9/23 星期三 00:19:38
* File Name :B.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
struct Friend {
int m, s;
bool operator < (const Friend &r) const {
return m < r.m;
}
}f[N]; int main(void) {
int n, d, mn = INF, mx = -1;
ll sum = 0;
scanf ("%d%d", &n, &d);
for (int i=1; i<=n; ++i) {
scanf ("%d%d", &f[i].m, &f[i].s);
if (f[i].m > mx) mx = f[i].m;
if (f[i].m < mn) mn = f[i].m;
sum += f[i].s;
}
if (mx - mn < d) {
printf ("%I64d\n", sum); return 0;
}
sort (f+1, f+1+n);
int l = 1, r = 2;
ll ans = f[1].s; sum = f[1].s;
while (true) {
while (r <= n && f[r].m - f[l].m < d) {
sum += f[r++].s;
}
ans = max (ans, sum);
if (r > n) break;
sum -= f[l++].s;
}
printf ("%I64d\n", ans); return 0;
}
题意:从根节点1出发,到底部的点的路径没有超过连续m个点有cat的个数为多少
分析:简单的深搜,记录走到当前点最大连续cat数,注意一些剪枝
/************************************************
* Author :Running_Time
* Created Time :2015/9/23 星期三 00:19:41
* File Name :C.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
vector<int> G[N];
int cat[N];
bool vis[N];
int n, m, ans; void DFS(int u, int fa, int num) {
for (int i=0; i<G[u].size (); ++i) {
int v = G[u][i];
if (vis[v] || v == fa) continue;
if (cat[v]) {
if (num + 1 <= m) { //算上当前点,cat + 1
if (G[v].size () == 1) { //到达底部
vis[v] = true; ans++;
}
else {
vis[v] = true; //未到达底部
DFS (v, u, num + 1);
}
}
else continue; //条件不符,不往下艘
}
else {
if (num <= m) {
if (G[v].size () == 1) {
vis[v] = true; ans++;
}
else {
vis[v] = true;
DFS (v, u, 0);
}
}
else continue;
}
}
} int main(void) {
scanf ("%d%d", &n, &m);
for (int i=1; i<=n; ++i) {
scanf ("%d", &cat[i]);
}
for (int u, v, i=1; i<n; ++i) {
scanf ("%d%d", &u, &v);
G[u].push_back (v);
G[v].push_back (u);
}
DFS (1, 0, cat[1]);
printf ("%d\n", ans); return 0;
}
状态压缩DP D - Kefa and Dishes
题意:n道菜选择m道,每道菜有一个愉悦度,如果某些菜按照先后顺序吃还能得到额外的愉悦度,问最大愉悦度为多少
分析:其实就是一个DAG问题,数据范围18应该想到状压,我不熟悉以为数据范围太大,做不了。dp[mask][i] 表示当在mask集合状态下,最后是第i道菜的最大愉悦度为多少,状态转移方程:dp[(i|(1<<l))][l] = max (dp[i][j] + a[l] + g[j][l]) 复杂度O(2n * n2).
/************************************************
* Author :Running_Time
* Created Time :2015/9/23 星期三 01:49:58
* File Name :D.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 18;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
int n, m, k;
ll dp[(1<<N)+10][N];
int a[N];
int g[N][N]; int main(void) {
scanf ("%d%d%d", &n, &m, &k);
for (int i=0; i<n; ++i) {
scanf ("%d", &a[i]);
}
for (int u, v, c, i=1; i<=k; ++i) {
scanf ("%d%d%d", &u, &v, &c);
if (g[u-1][v-1] < c) g[u-1][v-1] = c;
}
int maxS = (1 << n);
for (int i=0; i<n; ++i) {
dp[(1<<i)][i] = a[i];
} for (int i=1; i<maxS; ++i) {
for (int j=0; j<n; ++j) {
if ((i & (1 << j)) == 0) continue;
for (int l=0; l<n; ++l) {
if ((i & (1 << l)) == 0) {
if (dp[(i|(1<<l))][l] < dp[i][j] + a[l] + g[j][l]) {
dp[(i|(1<<l))][l] = dp[i][j] + a[l] + g[j][l];
}
}
}
}
}
ll ans = 0;
for (int i=1; i<maxS; ++i) {
int cnt = 0;
for (int j=0; j<n; ++j) {
if ((i & (1 << j)) != 0) cnt++;
}
if (cnt == m) {
for (int j=0; j<n; ++j) {
if ((i & (1 << j)) != 0) {
if (ans < dp[i][j]) ans = dp[i][j];
}
}
}
}
printf ("%I64d\n", ans); return 0;
}
Codeforces Round #321 (Div. 2)的更多相关文章
- Codeforces Round #321 (Div. 2) E. Kefa and Watch 线段树hash
E. Kefa and Watch Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/580/prob ...
- Codeforces Round #321 (Div. 2) C. Kefa and Park dfs
C. Kefa and Park Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/580/probl ...
- Codeforces Round #321 (Div. 2) B. Kefa and Company 二分
B. Kefa and Company Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/580/pr ...
- Codeforces Round #321 (Div. 2) A. Kefa and First Steps 水题
A. Kefa and First Steps Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/58 ...
- codeforces水题100道 第十四题 Codeforces Round #321 (Div. 2) A. Kefa and First Steps (brute force)
题目链接:http://www.codeforces.com/problemset/problem/580/A题意:求最长连续非降子序列的长度.C++代码: #include <iostream ...
- Codeforces Round #321 (Div. 2) D. Kefa and Dishes(状压dp)
http://codeforces.com/contest/580/problem/D 题意: 有个人去餐厅吃饭,现在有n个菜,但是他只需要m个菜,每个菜只吃一份,每份菜都有一个欢乐值.除此之外,还有 ...
- 「日常训练」Kefa and Dishes(Codeforces Round #321 Div. 2 D)
题意与分析(CodeForces 580D) 一个人有\(n\)道菜,然后要点\(m\)道菜,每道菜有一个美味程度:然后给你了很多个关系,表示如果\(x\)刚好在\(y\)前面做的话,他的美味程度就会 ...
- 「日常训练」Kefa and Park(Codeforces Round #321 Div. 2 C)
题意与分析(CodeForces 580C) 给你一棵树,然后每个叶子节点会有一家餐馆:你讨厌猫(waht?怎么会有人讨厌猫),就不会走有连续超过m个节点有猫的路.然后问你最多去几家饭店. 这题我写的 ...
- 「日常训练」Kefa and Company(Codeforces Round #321 Div. 2 B)
题意与分析(CodeForces 580B) \(n\)个人,告诉你\(n\)个人的工资,每个人还有一个权值.现在从这n个人中选出m个人,使得他们的权值之和最大,但是对于选中的人而言,其他被选中的人的 ...
- Codeforces Round #321 (Div. 2) Kefa and Dishes 状压+spfa
原题链接:http://codeforces.com/contest/580/problem/D 题意: 给你一些一个有向图,求不超过m步的情况下,能获得的最大权值和是多少,点不能重复走. 题解: 令 ...
随机推荐
- Devices下设备的进程显示为问号的问题
adb shell getprop ro.debuggable 返回 ro.debuggable=0 说明这个机子的版本不是userdebug版本,是user版本 只有这 ...
- Jetty的JNDI数据源
一. 此处绑定的数据源是以 DBCP 为实现.首先必须将数据库驱动(这里用了MYSQL数据库)和DBCP所需要的 Jar 包复制到 Jetty 根目录的 lib 目录下.DBCP主要需要以下3个文件: ...
- PM12条
PM首先是用户 站在用户角度看待问题 用户体验是一个完整的过程 追求效果,不做没用的东西 发现需求,而不是创造需求 决定不做什么,往往比决定做什么更重要 用户是很难被教育的,要迎合用户,而不是改变用户 ...
- safi 中placeholder不垂直居中
用css hack将line-height 设置为1 例子: input{height: 32px; line-height: 32px; [;line-height: 1px;]};
- iOS 中代码获取当前版本号
[1]概念 iOS的版本号,一个叫做Version,一个叫做Build,这两个值都可以在Xcode 中选中target,点击“Summary”后看到. Version在plist文件中的key是“CF ...
- 织梦DedeCMS信息发布员发布文章默认自动审核更新并生成HTML页面
织梦DedeCMS信息发布员发布文章默认自动审核更新并生成HTML页面 一直以为DEDECMS的信息发布员在后台发布文章后,非要管理员审核才能显示,今天一哥们问我这个问题.问:“能不能直接发布,并自动 ...
- python批量读取txt文件为DataFrame
我们有时候会批量处理同一个文件夹下的文件,并且希望读取到一个文件里面便于我们计算操作.比方我有下图一系列的txt文件,我该如何把它们写入一个txt文件中并且读取为DataFrame格式呢? 首先我们要 ...
- 【SCOI 2009】 Windy数
[题目链接] 点击打开链接 [算法] 数位DP,注意处理前导零的情况 [代码] #include<bits/stdc++.h> using namespace std; #define M ...
- Backbone.js之model篇(一)
Backbone.js之model篇(一) Backbone 是一个前端 JS 代码 MVC 框架,它不可取代 Jquery,不可取代现有的 template 库.而是和这些结合起来构建复杂的 web ...
- springboot读写分离--temp
我最初的想法是: 读方法走读库,写方法走写库(一般是主库),保证在Spring提交事务之前确定数据源. 保证在Spring提交事务之前确定数据源,这个简单,利用AOP写个切换数据源的切面,让他的优先级 ...