【JZOJ5264】化学
2024-08-28 08:57:45
Description
Input
Output
Sample Input
3 10
1 2 10
Sample Output
5
Hint
题解:
这个题目通过30%部分分的提示,我们可以猜出这个题目的正解就是折半搜索(然而我还是没做出来,毕竟是第一次写这种题吧!),我们考虑,先搜出前一半的,将所有方案的话费都记下来(存在f数组中),sort一遍,然后搜下一半,搜到最后的时候,对于每种方案(记后一半的花费为w),显然只要w+f[i]<=m就是合法方案,所以对于每个方案我们可以二分出最大的合法前一半方案的位置,直接统计答案就可以了.
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define ll long long
using namespace std;
ll coss[],f[<<];
ll n,m,tot,nn,anss=; void dfs1(int now,int co){
if(co>m) return;
if(now==nn+){
f[++tot]=co;
return;
}
dfs1(now+,co+coss[now]);
dfs1(now+,co);
} void dfs2(int now,int co){
if(co>m) return;
if(now==n+){
int l=,r=tot,mid,ans=;
while(l<=r){
mid=(l+r)/;
if(f[mid]+co<=m) ans=mid,l=mid+;
else r=mid-;
}
anss+=ans;
return;
}
dfs2(now+,co+coss[now]);
dfs2(now+,co);
} int main()
{
scanf("%lld%lld",&n,&m);nn=n/;
for(int i=;i<=n;i++) scanf("%lld",&coss[i]);
dfs1(,);
sort(f+,f+tot+);
dfs2(nn+,);
printf("%lld",anss);
return ;
}
最新文章
- List view优化
- if 判断中出现逗号
- WPF下制作的简单瀑布流效果
- tcp/ip详解-ip头部选项字段
- JavaSE基础之this关键字的引用
- Interpreter
- 【英语】Bingo口语笔记(21) - 表达“请客吃饭”
- Android开发环境中的概念和工具介绍
- Can&#39;t create/write to file &#39;/tmp/#sql_3105_0.MYI&#39; (Errcode: 13)
- C# socket通信随记回顾
- Struts2-整理笔记(二)常量配置、动态方法调用、Action类详解
- testng中使用reportng报告
- MySQL数据库优化的八种方式
- VS code 中的各种变量 ${file},${fileBasename}
- WRITE T AFTER ADVANCING 2 LINES
- gdb 命令汇总
- char是所有类型中最短的 char多为8位,
- webscan v0.01
- 【转】每天一个linux命令(7):mv命令
- http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html