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步的情况下,能获得的最大权值和是多少,点不能重复走. 题解: 令 ...
随机推荐
- 【转】idea激活搭建授权服务器
1.下载软件:磁力链接: magnet:?xt=urn:btih:2289E4F8CEB346AC44E54C8C0DA706CC537301AA 复制磁力链接地址 magnet:?xt=urn:bt ...
- lc.exe 已退出 代码为 -1
地址:http://jingyan.baidu.com/article/91f5db1bd0ace31c7f05e321.html
- 图解 servlet 与jsp的关系
Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容.Servlet是平台独立的Java类,编写一个Servlet,实际 ...
- eclipse4.3 解决没有check out as maven project
最近想工作之余写点测试demo,习惯了公司的开发环境,便决定自己搭建开发环境,首先是找到好用的eclipse,就是能够使用eclipse创建maven project工程,该工程能够被eclipse的 ...
- js 中整理(一)
一. 冒泡与冒泡阻止 var arr={5,0,-56,900,12,9000,-123}; var flag=false; //大的排序次数(arr.length-1) for(var i=0; ...
- Codeforces Round #106 (Div. 2) D. Coloring Brackets —— 区间DP
题目链接:https://vjudge.net/problem/CodeForces-149D D. Coloring Brackets time limit per test 2 seconds m ...
- ZOJ3209 Treasure Map —— Danc Links 精确覆盖
题目链接:https://vjudge.net/problem/ZOJ-3209 Treasure Map Time Limit: 2 Seconds Memory Limit: 32768 ...
- MYSQL初级学习笔记八:MySQL中常用的函数!(视频序号:初级_45-50)
知识点十:MySQL中的函数(45-50) 数学函数: 名称 描述 CEIL() 进一取整 FLOOR() 舍一取整 MOD 取余数(取摸) POWER() 幂运算 ROUND() 四舍五入 TRUN ...
- Python学习笔记_Mysql数据库、Excel
一.操作mysql数据库 import pymysql # 1.连上数据库:账号,密码,ip,端口号,数据库 # 2.建立游标(去数据库拿东西的工人) # 3.执行sql # 4.获取结果 # 5.关 ...
- AJAX --- 一种创建交互式网页应用的网页开发技术
目录 AJAX 创建XHR实例 指定readyStatechange事件处理程序 启动请求 发送请求 接收数据 取消XHR请求/响应 AJAX ajax核心技术就是 XMLHttpRequest 对象 ...