description


analysis

  • 对于\(n=0\)的点,直接模拟就好了

  • 状压\(DP\),设\(f[i][j][S]\)表示到第\(i\)题、连续\(GG\)了\(j\)题、喝的饮料集合为\(S\)的最大答案

  • 由于一题可以喝多瓶饮料所以转移需要枚举\(S\)的子集\(SS\)来转移

  • 然后转移比较显然但是细节恶心

  • 我不会告诉你我一共打了三个DP然后调出来其中一个才切的


code

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<iostream>
#define MAXN 105
#define MAX 500005
#define ha 19260817
#define db double
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i) using namespace std; db f[MAXN][MAXN][3000],val[3000][3000];
ll x[MAX],yy[MAX],y[MAX],down[MAX],a[MAX],dif[MAX];
ll n,m,k,last;
db ans; inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline db sqr(db x){return x*x;}
inline db max(db x,db y){return x>y?x:y;}
inline db min(db x,db y){return x<y?x:y;}
int main()
{
freopen("T1.in","r",stdin);
//freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
n=read(),m=read(),k=read();
fo(i,1,n)x[i]=read();fo(i,1,m)yy[i]=read();fo(i,1,k-1)down[i]=read();
fo(i,1,k)a[i]=read(),y[i]=yy[read()],dif[i]=read();
if (n==0)
{
db anss=0;
fo(i,1,k)
{
db prob=a[i]*(1-sqr(max(0,1-1.0*y[i]*(last?(1.0-down[i-last]/100.0):1)/dif[i])));
if (prob<0.64*a[i])last=i;anss+=prob;
}
printf("%.2lf\n",anss);
return 0;
}
fo(i,0,k)fo(j,0,k)fo(l,0,(1<<n)-1)f[i][j][l]=-ha;
f[0][0][(1<<n)-1]=0; fo(S,0,(1<<n)-1)
{
for (reg SS=S;SS>=0;SS=(SS-1)&S)
{
val[S][SS]=1.0;
fo(i,1,n)if ((S&(1<<(i-1))) && (!(SS&(1<<(i-1)))))val[S][SS]*=1+x[i]/100.0;
if (!SS)break;
}
} fo(i,1,k)
{
fo(j,0,i)
{
fo(S,0,(1<<n)-1)if (f[i-1][j][S]>=0)
{
for (reg SS=S;SS>=0;SS=(SS-1)&S)
{
db pro=val[S][SS];
if (j)
{
db tmp=a[i]*(1-sqr(max(0,1-1.0*(y[i]*pro*(1-down[j]/100.0))/dif[i])));
if (tmp>=0.64*a[i])f[i][j+1][SS]=max(f[i][j+1][SS],f[i-1][j][S]+tmp);
else f[i][1][SS]=max(f[i][1][SS],f[i-1][j][S]+tmp);
}
else
{
db tmp=a[i]*(1-sqr(max(0,1-1.0*(y[i]*pro)/dif[i])));
if (tmp>=0.64*a[i])f[i][0][SS]=max(f[i][0][SS],f[i-1][0][S]+tmp);
else f[i][1][SS]=max(f[i][1][SS],f[i-1][0][S]+tmp);
}
if (!SS)break;
}
}
}
}
fo(i,0,k)fo(j,0,(1<<n)-1)ans=max(ans,f[k][i][j]);
printf("%.2lf\n",ans);
return 0;
}

【JZOJ6350】考试(test)的更多相关文章

  1. 全网独家MongoDB Certified DBA Associate考试认证视频

    该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...

  2. 记lrd的高二上学期第五次调研考试

    河北某某中学的调研考试其实是很好玩的经历呢.可惜没有太多机会了. 背景: NOIP2016回来之后没有好好学文化课-.自习能翘就翘了,衡中特产学案自助没有好好写(说来我好像从来没被老师查到过,上课写学 ...

  3. 1009: [HNOI2008]GT考试

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数\(X_1X_ ...

  4. mysql练习题-查询同时参加计算机和英语考试的学生的信息-遁地龙卷风

    (-1)写在前面 文章参考http://blog.sina.com.cn/willcaty. 针对其中的一道练习题想出两种其他的答案,希望网友给出更多回答. (0) 基础数据 student表 +-- ...

  5. js封装用户选项传递给Servlet之考试系统二

    <%@ page language="java" import="java.util.*" contentType="text/html; ch ...

  6. js动态生成选项之考试系统(一)

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  7. 分享一个LiteDB做的简单考试系统辅助工具

    凌晨,被安排在公司值班,因为台风“灿鸿”即将登陆,风力太大,办公楼,车间等重要部分需要关注.所以无聊,那就分享一下,今天给朋友临时做的一个小的考试系统辅助工具吧.其实非常小,需求也很简单,但是可以根据 ...

  8. CCF考试

    第八次CCF考试记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四题的代码 第 ...

  9. PAT 1041. 考试座位号(15)

    每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...

随机推荐

  1. Spring-Boot使用neo4j-java-driver-- 查找两个节点之间关系的最短路径

    一.Cypher数据 create (小北:朋友圈{姓名:"小北", 喜欢的书类:"Poetry"}), (小菲:朋友圈{姓名:"小菲", ...

  2. to meet you 常用类库与技巧

    1.Java的异常体系 2.从概念角度解析Java的异常处理机制 3.从责任角度看Java的异常体系 checked exception 必须try catch 或者继续向上抛出异常,否则编译不能通过 ...

  3. java中equse和==做比较记录(转)

    String使用的equals方法和==的区别 equals方法和==的区别   首先大家知道,String既可以作为一个对象来使用,又可以作为一个基本类型来使用.这里指的作为一个基本类型来使用只是指 ...

  4. 实体类Json串转成DataTable

    private DataTable GetJsonToDataTable(string json) { List<Object_DeclareInfo> arrayList = JsonC ...

  5. java ThreadPoolExecutor 异常捕获

    一,创建一个线程池 其中: public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) 饱和策略执行时的具体逻辑. p ...

  6. Java KMP算法代码

    1. KMP 算法(字符串匹配算法)较 BF(朴素的字符串匹配)算法有哪些改进 1) 在主串和子串匹配的过程中,主串不再回退,只改变子串的比较位置. 2) 为子串生成对应的next数组,每次匹配失败, ...

  7. *args和**kwargs用法

    ''' @Date: 2019-10-10 21:14:56 @LastEditors: 冯浩 @LastEditTime: 2019-10-20 22:38:16 ''' def func(*arg ...

  8. leetcode-399-除法求值

    方法一:dfs+图 class Solution: def calcEquation(self, equations: List[List[str]], values: List[float], qu ...

  9. flume注意的事项

    bin/flume-ng agent --conf conf/ --name a3 --conf-file conf/flume-dir.conf & 在使用Spooling Director ...

  10. 了解Metasploit中的Payloads(有效载荷)

    什么是payload? payload又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell,也可以进行程序注入等.也有人把payloads称 为shellcode. Shellco ...