水 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. oracle的shared、dedicated模式解析

    主要參考文档:http://www.itpub.net/thread-1714191-1-1.html Oracleh有两种server模式shared mode和dedicated mode. De ...

  2. js弹出QQ对话框在线交谈

    <div style="position:absolute; top:110px; right:220px; z-index:2;"> <a target=&qu ...

  3. sanic官方文档解析之logging和request Data

    1,sanic的logging: Sanic允许有做不同类型的日志(通过的日志,错误的日志),在基于Python3的日志API接口请求,你必须具备基本的Python3的日志知识,在你如果想创建一个新的 ...

  4. Spring的声明式事务

    1.与hibernate集成 <bean id="sessionFactory" class="org.springframework.orm.hibernate3 ...

  5. 关于ie6 下背景图片不透明以及Img不透明

    ie6 下背景图片不透明的方法,加上下面的js即可解决 //解决IE6下图片不透明 function correctPNG() // correctly handle PNG transparency ...

  6. Why you shouldn’t connect your mobile application to a database

    BY CRAIG CHAPMAN · PUBLISHED 2015-07-02 · UPDATED 2015-07-02   Working at Embarcadero, I frequently ...

  7. HDU1520 Anniversary party —— 树形DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...

  8. 关于js的值传递和引用传递

    最近在弄一个东西,明明就很简单的.不知道为啥有个坑,双向绑定,不过当有个数组为空时,它不会发送空的数组,而是不发送.这就坑爹了.导致老是删不掉. 处理了下,改成验证为空时,发送'[]‘字符串.成功.但 ...

  9. jQuery常用插件大全(9)ResponsiveSlides插件

    ResponsiveSlides.js是一个展示同一容器内图片的轻量级响应式jQuery幻灯片插件(tiny responsive slideshow jQuery plugin).它支持包括IE6在 ...

  10. linux初级学习笔记四:Linux文件管理类命令详解!(视频序号:03_1)

    本节学习的命令:cat(tac),more,less,head,tail,cut,sort,uniq,wc,tr 本节学习的技能:目录管理 文件管理 日期时间 查看文本 分屏显示 文本处理 文件管理命 ...