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);
}
}

最新文章

  1. Linux下高cpu解决方案
  2. struts2中的jar包
  3. ruby 资源收集
  4. 入門必學NO.1 Android 初學特訓班(第四版) 目錄
  5. SQL 实现,如果存在就更新,如果不存在就添加
  6. ASP.NET MVC SignalR(1):背景
  7. Android的Adapter用法
  8. c语言位运算符
  9. hdoj 3342 Legal or Not【拓扑排序】
  10. c++ 10
  11. WindowsForm 增 删 查 改
  12. Storm入门(十三)Storm Trident 教程
  13. 干货分享:Neutron的PPT,帮助你理解Neutron的各种细节
  14. 2017-11-09 中英文代码对比系列之Java一例
  15. Java访问修饰符(访问控制符)
  16. 二级VB备考中
  17. effective c++ 笔记 (5-8)
  18. HTTTP及TCP的超时以及KEEP-ALIVE机制小结
  19. Go语言初尝
  20. 使用Python登录腾讯MTA数据分析平台,然后获取相关数据

热门文章

  1. Python 1-2模块的循环导入问题
  2. MYSQL每日一学 - 时间间隔表达式
  3. IDEA基本使用及配置(2)
  4. LLVM 概览
  5. js高级程序设计第八章BOM(未完成,待续)
  6. [luoguP1877] [HAOI2012]音量调节(DP)
  7. Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
  8. POJ 2456_Aggressive cows
  9. Layui栅格系统与后台框架布局
  10. Ubuntu 16.04粘贴板增强工具Diodon