[CSP-S模拟测试]:答题(meet in the middle)
2024-09-05 11:42:57
题目传送门(内部题142)
输入格式
输入文件的第一行为两个数$n,P$。
接下来一行$n$为个正整数,表示每道题的分数。
输出格式
输出一行一个正整数,为至少需要获得的分数。
样例
样例输入:
2 0.5
1 2
样例输出:
2
数据范围与提示
设一道题分数的最大值为$m$。
对于$50\%$的数据,满足$n\leqslant 20$。
对于另$20\%$的数据,满足$m\leqslant 1,000$。
对于$100\%$的数据,满足$2\leqslant n\leqslant 40,1\leqslant m\leqslant 10^6$。
题解
$n^{20}$爆搜,然后可以预处理后$20$个,然后用$meet\ in\ the\ middle$就好了。
时间复杂度:$\Theta(2^{\frac{n}{2}})$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n;
int a[50],L,R,sum,f[30000001],g[3000001],mx;
long long qpow;
double P;
bool judge(int x)
{
long long res=0;
for(int i=0;i<(1<<R);i++)if(g[i]<=x)res+=f[min(mx,x-g[i])];
return ((double)res/qpow)<P;
}
int main()
{
scanf("%d%lf",&n,&P);
L=n/2;R=n-L;qpow=pow(2LL,n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
mx+=(i<=L)*a[i];
}
for(int i=0;i<(1<<L);i++)
{
int res=0;
for(int j=1;j<=L;j++)if(i&(1<<(j-1)))res+=a[j];
f[res]++;
}
for(int i=1;i<=sum;i++)f[i]+=f[i-1];
for(int i=0;i<(1<<R);i++)
{
int res=0;
for(int j=L+1;j<=n;j++)if(i&(1<<(j-L-1)))res+=a[j];
g[i]=res;
}
int lft=0.0,rht=sum,res=sum;
while(lft<=rht)
{
int mid=(lft+rht)>>1;
if(judge(mid))lft=mid+1;
else{rht=mid-1;res=mid;}
}
printf("%d",res);
return 0;
}
rp++
最新文章
- android中MVP模式
- 错误描述:请求“System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限已失败
- CSS3选择器(二)--表单
- 静态资源[org.springframework.web.servlet.PageNotFound]
- MarkDown认识与入门
- 剑指OFFER之用两个栈实现队列(九度OJ1512)
- NGUI对象跟随鼠标拖拽移动
- HDU 1046 - Gridland
- oracle11g 体系结构详解
- three.js 实现全景以及优化(2)
- windows 7 netsh wlan命令连接wifi
- .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了
- The POM for cn.e3mall:e3mall-common:jar:0.0.1-SNAPSHOT is missing, no dependency information available
- 从Windows到linux小记
- springBoot的数据库操作
- SharePoint 2019 离线安装准备工具
- Java压缩图片的实现类
- vue-infinite-loading2.0 中文文档
- 关于gb2312编码和utf8码的一个问题
- nginx之配置proxy_set_header
热门文章
- 使用.netcore部署window服务完成过程(使用nssm,Topshelf)
- html和css制作百度界面
- vue-cli3.x创建项目vue create hello-world
- 第十一章、super()详解
- Win10系统如何利用蓝牙设置动态锁?
- OpenResty 执行流程阶段
- zabbix 自定义Key (六)
- Summer training #4
- Linux之RPM 软件管理程序
- mybatis中#{}和${}的区别(转载)