期望得分: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的更多相关文章

  1. 2017北京国庆刷题Day7 afternoon

    期望得分:100+30+100=230 实际得分:60+30+100=190 排序去重 固定右端点,左端点单调不减 考场上用了二分,没去重,60 #include<cstdio> #inc ...

  2. 2017北京国庆刷题Day1 afternoon

    期望得分:100+100+100=300 实际得分:100+100+100=300 T1 一道图论好题(graph) Time Limit:1000ms   Memory Limit:128MB 题目 ...

  3. 2017北京国庆刷题Day5 afternoon

    期望得分:100+60+100=260 实际得分:0+60+40=100 设图中有m个环,每个环有si条边,有k条边不在环中 ans= (2^s1 -2)*( 2^s2 -2)* (2^s3 -2)… ...

  4. 2017北京国庆刷题Day3 morning

    期望得分:100+60+0=160 实际得分:100+30+0=130 考场上用的哈希 #include<cstdio> #include<cstring> #include& ...

  5. 2017北京国庆刷题Day2 afternoon

    期望得分:100+100+50=250 实际得分:100+70+50=220 T1 最大值(max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一 ...

  6. 2017北京国庆刷题Day2 morning

    期望得分:100+100+40=240 实际得分:100+40+0=140 T1 一道图论神题(god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK ...

  7. 2017北京国庆刷题Day4 morning

    期望得分:0+40+30=70 实际得分:0+10+10=20 题目修改:只能由0变1,只能用一次操作 大模拟 #include<cstdio> #include<cstring&g ...

  8. 2017北京国庆刷题Day5 morning

    期望得分:0+60+60=120 实际得分:0+30+60=90 令g=gcd(X11,X12,X13……) 则行列式可能为D的充要条件为g|D 1.g|D为必要条件: 由定义来算行列式的时候,每一项 ...

  9. 2017北京国庆刷题Day4 afternoon

    期望得分:100+100+0=200 实际得分:5+0+0=5 每加入一个数,x的因数位置++ 注意:根号x枚举时,如果x是完全平方数,根号x会重复累计2次,要减去 考场上没减,5分 /(ㄒoㄒ)/~ ...

随机推荐

  1. 跳蚤APP

    1.项目描述 我们致力于制作一款服务于校内师生的物品转让平台,在此平台上的用户可以发布要转让或欲购买的物品信息. 2.创新与收益 Need(需求) 如今在市场上有许多的二手交易线上平台,它们的服务范围 ...

  2. (转)ActiveMQ的重连机制

    花了一天的时间,终于搞明白了我的疑问. failover://(tcp://localhost:6168)?randomize=false&initialReconnectDelay=100& ...

  3. Building microservices with ASP.NET Core (without MVC)(转)

    There are several reasons why it makes sense to build super-lightweight HTTP services (or, despite a ...

  4. iOS-开发者账号与证书

    0.开发者账号的申请 1.iOS-证书相关 2.iOS-证书申请 3.iOS-APNS证书申请与使用 4.iOS-App发布证书的申请与使用

  5. SolrPerformanceFactors--官方文档

    原文地址:http://wiki.apache.org/solr/SolrPerformanceFactors Contents Schema Design Considerations indexe ...

  6. 【bzoj3130】[Sdoi2013]费用流 二分+网络流最大流

    题目描述 Alice和Bob做游戏,给出一张有向图表示运输网络,Alice先给Bob一种最大流方案,然后Bob在所有边上分配总和等于P的非负费用.Alice希望总费用尽量小,而Bob希望总费用尽量大. ...

  7. 【bzoj4006】[JLOI2015]管道连接 斯坦纳树+状压dp

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向图和 $p$ 个特殊点,每个特殊点有一个颜色.要求选出若干条边,使得颜色相同的特殊点在同一个连通块内.输出最小边权和. 输入 第一行包含三个整数 n ...

  8. 洛谷 P1560 蜗牛的旅行

    明显这是一道搜索题,其他题解写的有点复杂,我有更简便的写法 既然题目说走到不能再走,那我们就干脆一点,一条路走到黑,不到南墙不回头,一下把要走的路都走完,不但效率高,也好写,关键是大大节省了系统栈 一 ...

  9. Period UVALive - 3026(next数组)

    题意: 给出一个长度不超过1000000的字符串S, 对于该字符串的所有前缀求其周期, 如果周期K >= 2输出起始位置是第几个字符和其周期K 解析: 先求next数组 对于每一个位置如果i % ...

  10. [洛谷P4626]一道水题 II

    题目大意:求$lcm(1,2,3,\cdots,n)\pmod{100000007}$,$n\leqslant10^8$ 题解:先线性筛出质数,然后求每个质数最多出现的次数,可以用$\log_in$来 ...