水 A - Kefa and First Steps

/************************************************
* 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;
}

  

尺取法 B - Kefa and Company

题意:每个朋友有他的金钱和友好程度,从朋友中选取一些人,问在贫富差距小于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;
}

  

DFS C - Kefa and Park

题意:从根节点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)的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. Codeforces Round #321 (Div. 2) D. Kefa and Dishes(状压dp)

    http://codeforces.com/contest/580/problem/D 题意: 有个人去餐厅吃饭,现在有n个菜,但是他只需要m个菜,每个菜只吃一份,每份菜都有一个欢乐值.除此之外,还有 ...

  7. 「日常训练」Kefa and Dishes(Codeforces Round #321 Div. 2 D)

    题意与分析(CodeForces 580D) 一个人有\(n\)道菜,然后要点\(m\)道菜,每道菜有一个美味程度:然后给你了很多个关系,表示如果\(x\)刚好在\(y\)前面做的话,他的美味程度就会 ...

  8. 「日常训练」Kefa and Park(Codeforces Round #321 Div. 2 C)

    题意与分析(CodeForces 580C) 给你一棵树,然后每个叶子节点会有一家餐馆:你讨厌猫(waht?怎么会有人讨厌猫),就不会走有连续超过m个节点有猫的路.然后问你最多去几家饭店. 这题我写的 ...

  9. 「日常训练」Kefa and Company(Codeforces Round #321 Div. 2 B)

    题意与分析(CodeForces 580B) \(n\)个人,告诉你\(n\)个人的工资,每个人还有一个权值.现在从这n个人中选出m个人,使得他们的权值之和最大,但是对于选中的人而言,其他被选中的人的 ...

  10. Codeforces Round #321 (Div. 2) Kefa and Dishes 状压+spfa

    原题链接:http://codeforces.com/contest/580/problem/D 题意: 给你一些一个有向图,求不超过m步的情况下,能获得的最大权值和是多少,点不能重复走. 题解: 令 ...

随机推荐

  1. Java获取域名

    private static final char URL_SPLASH = '/'; private static final String URL_SCHEME_POSTFIX = ": ...

  2. grunt简单教程

    Grunt简单教程 1.grunt简单介绍 Grunt是一个基于任务的命令行工具.依赖于node.js环境. 它能帮你合并js文件,压缩js文件,验证js.编译less,合并css.还能够配置自己主动 ...

  3. C系列语言终极校对宝典【第一、第二部分】

    第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...

  4. EF(Linq)框架使用过程中的小技巧汇总 dbfunctions

    这篇博客总结本人在实际项目中遇到的一些关于EF或者Linq的问题,作为以后复习的笔记或者供后来人参考(遇到问题便更新). 目录 技巧1: DbFunctions.TruncateTime()的使用 技 ...

  5. iOS开发——高级篇——多线程的安全隐患

    资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题   一.解 ...

  6. AMQP 0-9-1 Model Explained Why does the queue memory grow and shrink when publishing/consuming? AMQP和AMQP Protocol的是整体和部分的关系 RabbitMQ speaks multiple protocols.

    AMQP 0-9-1 Model Explained — RabbitMQ http://next.rabbitmq.com/tutorials/amqp-concepts.html AMQP 0-9 ...

  7. 推断php操作mysql(添删改查)是否成功

    近期在使用CI框架 , 可是里面的数据库操作没有ThinkPhp方便 , 不知道数据库操作的反馈信息 , 仅仅好借助原生方法来推断是否操作数据库成功 推断php操作mysql(添删改查)是否成功,主要 ...

  8. Windows ping源码

    需要测试外网的联通性,想到了用ping.网上下载了ping的源代码,调试下整理如下: /******************************************************** ...

  9. button在firefox 和 ie 下的问题

    最近做了一个关于数据库管理的项目,因为不用考虑ie9以下的兼容性,所以一股脑的写完啦,到测试的时候发现了一个bug IE和火狐下有个模块关闭按钮的hover没有反应,ie不行就算了,火狐怎么也不行?我 ...

  10. linux地址映射1、2、3(⭐⭐⭐)

    欢迎关注瘋耔新浪微博:http://weibo.com/cpjphone 一.线性映射与非线性映射                                                   ...