D1 模拟赛
T1 note 数组开小 菜的真实 60分
题目大意:
一个字符串 分成若干段 使每段内都没有重复的字符 求最少的段数
思路:
可以贪心
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 601010
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
char ch[MAXN];
int n,ans,hsh[];
int main()
{
freopen("note.in","r",stdin);
freopen("note.out","w",stdout);
scanf("%s",ch+);
int n=strlen(ch+);
for(int i=;i<=n;i++)
{
if(hsh[ch[i]-'a']) {memset(hsh,,sizeof(hsh));ans++;}
hsh[ch[i]-'a']=;
}
printf("%d",ans+);
}
T2 work 顺利a掉
题目大意:
一个数列A 取一些数 不能取连续k个数 求取的数的最大值
思路:
把问题转化为k个里面必须取一个 求取的数的最小值
可以使用单调队列优化dp
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 201010
using namespace std;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
ll n,k,a[MAXN],dp[MAXN],q[MAXN],l,r,s,ans=inf;
int main()
{
freopen("work.in","r",stdin);
freopen("work.out","w",stdout);
n=read(),k=read();
for(int i=;i<=n;i++) a[i]=read(),s+=a[i];
q[l=r=]=;
for(int i=;i<=n;i++)
{
while(l<r&&q[l]<i-k) l++;
dp[i]=dp[q[l]]+a[i];
while(l<r&&dp[i]<dp[q[r]]) r--;
q[++r]=i;
}
ans=dp[n];
for(int i=n-k+;i<n;i++)
ans=min(ans,dp[i]);
printf("%lld",s-ans);
}
T3 cave 在熊神的帮助下a掉
题目大意:
一棵树 每条边有边权x 走该条边会花费x点能量 可以重复走一条边 并会消耗2*x点能量
q次询问 每次询问k点能量可以最多走过多少个不同的点
思路:
首先可以想到dp i j 0/1 表示第i个点 用j点能量 进入子树是否回到i点 表示可以走过的最多不同点的个数
发现能量可能很大 就把 j 和dp表达的值调换
dp i j 0/1 表示第i个点 走j个不同点 进入子树是否回到i点 花费的最少能量
然后对于每个子树做背包
方程见代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 530
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,fst[MAXN],nxt[MAXN<<],to[MAXN<<],val[MAXN<<],cnt;
int sz[MAXN],dp[MAXN][MAXN][],t[MAXN][];
void add(int u,int v,int w) {nxt[++cnt]=fst[u],fst[u]=cnt,to[cnt]=v,val[cnt]=w;}
void dfs(int x,int fa)
{
sz[x]=;
for(int i=fst[x];i;i=nxt[i])
if(to[i]!=fa) {dfs(to[i],x);sz[x]+=sz[to[i]];}
}
void dfs(int x)
{
dp[x][][]=dp[x][][]=;
for(int i=fst[x];i;i=nxt[i])
if(sz[to[i]]<sz[x]) dfs(to[i]);
for(int j=fst[x];j;j=nxt[j])
if(sz[to[j]]<sz[x])
{
memset(t,,sizeof(t));
for(int i=;i<=sz[x];i++)
for(int k=;k<=min(sz[to[j]],i-);k++)
{
t[i][]=min(t[i][],min(dp[x][i-k][]+dp[to[j]][k][]+val[j],dp[x][i-k][]+dp[to[j]][k][]+*val[j]));//从这个该儿子的子树里出来进入别的儿子的树或从别的儿子的树出来进入该儿子的树
t[i][]=min(t[i][],dp[x][i-k][]+dp[to[j]][k][]+*val[j]);//需要从以儿子为根的树出来并从别的子树出来
}
//t数组因为忘记了背包要倒着dp导致需要t数组来保证不会改变被用到的dp值
for(int i=;i<=sz[x];i++)
dp[x][i][]=min(t[i][],dp[x][i][]),dp[x][i][]=min(t[i][],dp[x][i][]);
}
}
int main()
{
freopen("cave.in","r",stdin);
freopen("cave.out","w",stdout);
n=read();int a,b,c,res;
for(int i=;i<n;i++) {a=read(),b=read(),c=read();add(a,b,c);add(b,a,c);}
int T=read();memset(dp,,sizeof(dp));
dfs(,);dfs();
while(T--)
{
a=read(),res=;
for(int i=n;i>=;i--) if(dp[][i][]<=a) {res=i;break;}
printf("%d\n",res);
}
}
D1 模拟赛的更多相关文章
- 7.29NOIP模拟赛
7.29NOIP模拟赛 T1 YSG (1s,64MB,ysg.in,ysg.out) 描述 ysg,yxy,azw 三人正在刷题. 他们每做一题的时间都是一个有理数. 如果在某一时刻,三人同时做完一 ...
- NOI.AC: NOIP2018 全国模拟赛习题练习
闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 小奇模拟赛9.13 by hzwer
2015年9月13日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...
- PKUSC 模拟赛 day1 下午总结
下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...
随机推荐
- jQuery的ready与js的load事件的区别
摘自:http://www.cnblogs.com/see7di/archive/2011/07/15/2239677.html 为了理解这两个事件的异同,读者应该先了解HTML文档加载的顺序. DO ...
- HTML、CSS常用技巧
一.HTML 在介绍HTML之前,我们先看一下HTML的文档树结构,主要包括哪些: (一).头部标签 1,Doctype Doctype告诉浏览器使用什么样的HTML或XHTML规范来解析HTML文档 ...
- 如何转成libsvm支持的数据格式并做回归分析
本次实验的数据是来自老师给的2006-2008年的日期,24小时的温度.电力负荷数据,以及2009年的日期,24小时的温度数据,目的是预测2009年每天24小时的电力负荷,实验数据本文不予给出. 用l ...
- Python条件判断(if)
Python条件判断(if) 一.基本介绍 1.Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句…… 需要注意的是,Python没有像其他大多数语言一样使用 ...
- NYOJ-851寻找最大数(二),栈贪心!
寻找最大数(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你一个数字n(可能有前缀0). 要求从高位到低位,进行 进栈出栈 操作,是最后输出的结果最大. 输入 ...
- 建造高塔(codevs 1689)
题目描述 Description n有n种石块,石块能无限供应.每种石块都是长方体,其中第i种石块的长.宽.高分别为li.wi.hi.石块可以旋转,使得其中两维成为长度和宽度,第三维成为高度.如果要把 ...
- 2k进制数(codevs 1157)
题目描述 Description 设r是个2k进制数,并满足以下条件: (1)r至少是个2位的2k进制数. (2)作为2k进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为 ...
- idea使用之maven本地索引更新
idea使用起来的确挺顺手的,但遇到一些问题时,直接百度很难有答案,只能自己慢慢摸索了. 今天在倒腾idea仓库索引的时候,就出事情啦. 先说idea更新本地仓库索引吧,打开settings--> ...
- Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...
- [bzoj2208][Jsoi2010]连通数_bitset_传递闭包floyd
连通数 bzoj-2208 Jsoi-2010 题目大意:给定一个n个节点的有向图,问每个节点可以到达的点的个数和. 注释:$1\le n\le 2000$. 想法:网上有好多tarjan+拓扑序dp ...