把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

题解 P4799 [CEOI2015 Day2] 世界冰球锦标赛

传送门

题意

一共有 $n$ 种门票,第 $i$ 种门票的价格为 $val_i$,预算为 $M$。

问一共有多少种购买方式满足购买的总花费小于预算。

$1\le n\le40$,$1\le M \le 10^{18}$。

过程

切分($n\le 20$)

依照惯例,我们从部分分打起,看看前四个点,$n\le 20$,我们就可以用状压来解决,换句话说,我们二进制枚举每一个点是否选择,如果满足,那么就使答案 +1。

时间复杂度:$O(2^n)$。

切分2($n\le 40$,$m\le 10^6$)

对于这种情况,也是很明显的,我们可以使用 DP 解决。

正解

经过我们第二个部分分我们可以发现,我们的方案数其实是与我们的决策方案是没有关系的,实际上我们所需要的只是我们计算出来的代价和。

在加上我们的部分分 1,我们可以想到,我们用状压分别解决左部分,右部分,然后枚举我们左部分与右部分哪几个部分可以合并。
这个过程,我们排序后 upper_bound 即可。

inline void solve(int L,int R) {
    int len=R-L+1;
    int up=(1<<len)-1,ans=0;
    for(int j=1; j<=up; ++j) {
        tot[j]=tot[j-lowbit(j)]+a[dy[lowbit(j)]+L];
        if(tot[j]<=m) ++ans;
    }
}

...

int ans=0;
for(int i=0;i<=len1;++i) {
    if(sum[i]>m) break;
    ans+=upper_bound(tot,tot+len2+1,m-sum[i])-tot;
}
posted @ 2023-08-03 09:28  djh0314  阅读(37)  评论(0)    收藏  举报  来源
浏览器标题切换
浏览器标题切换end