2017北京国庆刷题Day7 morning
期望得分:100+0+100=200
实际得分:100+20+0=120

离散化搞搞
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 100001
int a[N],b[N];
bool vis[N];
void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
}
int main()
{
freopen("del.in","r",stdin);
freopen("del.out","w",stdout);
int n,k;
read(n); read(k);
for(int i=;i<=n;i++) read(a[i]),b[i]=a[i];
sort(b+,b+n+);
int tot=unique(b+,b+n+)-b-;
for(int i=;i<=n;i++) a[i]=lower_bound(b+,b+tot+,a[i])-b;
int cnt1=,cnt2=;
for(int i=;i<=n;i++)
if(!vis[a[i]]) vis[a[i]]=true,cnt1++;
else cnt2++;
if(k<=cnt2) printf("%d\n",cnt1);
else printf("%d\n",cnt1-(k-cnt2));
return ;
}


阅读理解之坑:加冕没有用
出题人想表达停在那儿,就是不再继续跳吃
考场上没写出来原因有二:
1、死磕加冕
2、怕TLE,写的记忆化,这种题最好先打出裸的dfs
#include<cstdio>
#include<algorithm> using namespace std; char s[];
int mp[][];
bool mp2[][],vis[][]; int cnt,mx,tot;
struct node
{
int x,y;
}ans[]; int dx[]={-,-,,};
int dy[]={-,,,-}; void init()
{
for(int i=;i<=;i++)
{
scanf("%s",s+);
for(int j=;j<=;j++) mp[i][j]=s[j]-'';
}
for(int i=;i<=;i++)
{
scanf("%s",s+);
for(int j=;j<=;j++) mp2[i][j]=s[j]-'';
}
} bool inmap(int x,int y)
{
return (!(x<=) && !(x>) && !(y<=) && !(y>));
} bool empty(int x,int y)
{
return !mp[x][y];
} bool jump(int x,int y)
{
if(!inmap(x,y)) return false;
return mp[x][y]==;
} bool have(int x,int y)
{
return vis[x][y];
} void update(int i,int j)
{
if(cnt>mx)
{
mx=cnt; tot=;
ans[].x=i; ans[].y=j;
}
else if(cnt==mx)
{
ans[++tot].x=i; ans[tot].y=j;
}
} void dfs(int x,int y,int sx,int sy)
{
vis[x][y]=true;
for(int i=;i<;i++)
if(jump(x+dx[i],y+dy[i]) && inmap(x+dx[i]+dx[i],y+dy[i]+dy[i]) && empty(x+dx[i]+dx[i],y+dy[i]+dy[i]))
{
if(have(x+dx[i],y+dy[i]) || have(x+dx[i]+dx[i],y+dy[i]+dy[i]) ) continue;
cnt++; update(sx,sy);
dfs(x+dx[i]+dx[i],y+dy[i]+dy[i],sx,sy);
cnt--;
}
vis[x][y]=false;
} void dfs2(int x,int y,int sx,int sy)
{
vis[x][y]=true;
for(int d=;d<;d++)
{
int nx=x,ny=y;
for(int i=;i<=;i++)
{
nx+=dx[d]; ny+=dy[d];
if(!inmap(nx,ny)) break;
if(mp[nx][ny]==) break;
if(!jump(nx,ny)) continue;
if(have(nx,ny)) continue;
vis[nx][ny]=true;
int nnx=nx,nny=ny;
for(int j=;j<=;j++)
{
nnx+=dx[d]; nny+=dy[d];
if(!inmap(nnx,nny)) break;
if(!empty(nnx,nny)) break;
if(have(nnx,nny)) continue;
cnt++; update(sx,sy);
dfs2(nnx,nny,sx,sy);
cnt--;
}
vis[nx][ny]=false;
}
}
vis[x][y]=false;
} void solve()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(mp[i][j]==)
{
if(!mp2[i][j]) dfs(i,j,i,j);
else dfs2(i,j,i,j);
}
if(!mx)
{
cnt=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(mp[i][j]==)
{
if(!mp2[i][j])
{
for(int k=;k<;k++)
if(inmap(i+dx[k],j+dy[k]) && empty(i+dx[k],j+dy[k])) update(i,j);
}
else
{
for(int k=;k<;k++)
{
int nx=i,ny=j;
for(int l=;l<=;l++)
{
nx+=dx[k];ny+=dy[k];
if(!inmap(nx,ny)) break;
if(!empty(nx,ny)) break;
update(i,j);
}
}
}
} }
printf("%d\n",tot);
for(int i=;i<=tot;i++) printf("(%d,%d)\n",ans[i].x,ans[i].y);
}
int main()
{
freopen("chess.in","r",stdin);
freopen("chess.out","w",stdout);
init();
solve();
}

考场上顺退概率DP+拓扑排序,全WA了。。
正解倒推
dp[i][j]表示还有i个馅饼没有掉下来,当前还差状态为j的馅饼的期望美味度
(还差状态为j的馅饼指的是 还有状态为j的馅饼没有吃到)
枚举当前要掉哪类馅饼
如果能吃,那就从吃和不吃里选最优解
如果不能吃,那就直接又后面转移
所以 状态转移方程(设当前正掉下第l类的馅饼)
if((j&pre[l])==pre[l]) dp[i][j]+=max(dp[i+1][j],dp[i+1][j|(1<<l-1)]+val[l]);
else dp[i][j]+=dp[i+1][j];
因为是期望,不要忘了除n
最后应该输出dp[0][0]
代码中因为是从n开始枚举的,所以输出了dp[1][0]
(感谢cyz020202 指出)
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define K 101
#define N 16 int bit[N];
int val[N],pre[N];
double dp[K+][<<N+]; void read(int &x)
{
x=; int f=; char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-; c=getchar(); }
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
x*=f;
} int main()
{
freopen("bonus.in", "r", stdin);
freopen("bonus.out", "w", stdout);
int k,n,x;
read(k); read(n);
bit[]=;
for(int i=;i<=n;i++) bit[i]=bit[i-]<<;
for(int i=;i<=n;i++)
{
read(val[i]);
read(x);
while(x) pre[i]+=bit[x-],read(x);
}
int S=<<n;
for(int i=k;i;i--)
for(int j=;j<S;j++)
{
for(int l=;l<=n;l++)
if((j&pre[l])==pre[l]) dp[i][j]+=max(dp[i+][j],dp[i+][j|bit[l-]]+val[l]);
else dp[i][j]+=dp[i+][j];
dp[i][j]/=1.0*n;
}
printf("%.6lf",dp[][]);
}
2017北京国庆刷题Day7 morning的更多相关文章
- 2017北京国庆刷题Day7 afternoon
期望得分:100+30+100=230 实际得分:60+30+100=190 排序去重 固定右端点,左端点单调不减 考场上用了二分,没去重,60 #include<cstdio> #inc ...
- 2017北京国庆刷题Day1 afternoon
期望得分:100+100+100=300 实际得分:100+100+100=300 T1 一道图论好题(graph) Time Limit:1000ms Memory Limit:128MB 题目 ...
- 2017北京国庆刷题Day5 afternoon
期望得分:100+60+100=260 实际得分:0+60+40=100 设图中有m个环,每个环有si条边,有k条边不在环中 ans= (2^s1 -2)*( 2^s2 -2)* (2^s3 -2)… ...
- 2017北京国庆刷题Day3 morning
期望得分:100+60+0=160 实际得分:100+30+0=130 考场上用的哈希 #include<cstdio> #include<cstring> #include& ...
- 2017北京国庆刷题Day2 afternoon
期望得分:100+100+50=250 实际得分:100+70+50=220 T1 最大值(max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一 ...
- 2017北京国庆刷题Day2 morning
期望得分:100+100+40=240 实际得分:100+40+0=140 T1 一道图论神题(god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK ...
- 2017北京国庆刷题Day4 morning
期望得分:0+40+30=70 实际得分:0+10+10=20 题目修改:只能由0变1,只能用一次操作 大模拟 #include<cstdio> #include<cstring&g ...
- 2017北京国庆刷题Day5 morning
期望得分:0+60+60=120 实际得分:0+30+60=90 令g=gcd(X11,X12,X13……) 则行列式可能为D的充要条件为g|D 1.g|D为必要条件: 由定义来算行列式的时候,每一项 ...
- 2017北京国庆刷题Day4 afternoon
期望得分:100+100+0=200 实际得分:5+0+0=5 每加入一个数,x的因数位置++ 注意:根号x枚举时,如果x是完全平方数,根号x会重复累计2次,要减去 考场上没减,5分 /(ㄒoㄒ)/~ ...
随机推荐
- SQLSERVER 根据身份证号码 往出生年月日 赋值
update CREW_SailorInfo set DT_DOB= ( case then , ) then , ) else null end) 注:此问题仅供参考 如有疑问 请加QQ群18153 ...
- 【IdentityServer4文档】- 使用客户端凭据保护 API
使用客户端凭据保护 API quickstart 介绍了使用 IdentityServer 保护 API 的最基本场景. 接下来的场景,我们将定义一个 API 和一个想要访问它的客户端. 客户端将在 ...
- ASP.NET 文档
标题:ASP.NET 文档 地址:https://docs.microsoft.com/zh-cn/aspnet/index#pivot=core&panel=core_overview 标题 ...
- Alpha 冲刺5
队名:日不落战队 安琪(队长) 今天完成的任务 组织第五次站立式会议(半冲刺总结交流会). 完成草稿箱前端界面. 明天的计划 回收站前端界面. 尝试去调用数据. 还剩下的任务 信息修改前端界面. 遇到 ...
- DB2 日志
跟Oracle类似DB2也分为两个模式,日志循环vs归档日志,也就是非归档和归档模式,下面对这两种模式做简单的介绍. 日志循环 日志循环是默认方式,也就是非归档模式,这种模式只支持backup off ...
- css声明的优先级
选择器的特殊性 选择器的特殊性由选择器本身的组件确定,特殊性值表述为4个部分,如0,0,0,0,0 一个选择器的具体特殊性如下确定 1.对于选择器给定的ID属性值,加0,1,0,0 2.对于选择器中给 ...
- TP中模型实例化
模型的实例化操作(重点) 模型虽然已经创建完成,但是由于模型的本质是一个类,类在使用的时候需要实例化操作. 5.1.普通实例化方法 普通实例化方法是指通过自己编写代码来new一个对象. $obj = ...
- 第145天:jQuery.touchSlider触屏满屏左右滚动幻灯片
1.HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- 【bzoj4011】[HNOI2015]落忆枫音 容斥原理+拓扑排序+dp
题目描述 给你一张 $n$ 个点 $m$ 条边的DAG,$1$ 号节点没有入边.再向这个DAG中加入边 $x\to y$ ,求形成的新图中以 $1$ 为根的外向树形图数目模 $10^9+7$ . 输入 ...
- C++解析(31):自定义内存管理(完)
0.目录 1.遗失的关键字mutable 2.new / delete 3.new[] / delete[] 4.小结 5.C++语言学习总结 1.遗失的关键字mutable 笔试题: 统计对象中某个 ...