首页 > 其他 > 详细

CSP-S模拟测试 88 题解

时间:2019-10-30 12:56:01      阅读:83      评论:0      收藏:0      [点我收藏+]

T1 queue:

考场写出dp柿子后觉得很斜率优化,然后因为理解错了题觉得斜率优化完全不可做,只打了暴力。

实际上他是可以乱序的,所以直接sort,正确性比较显然,贪心可证,然后就是个sb斜率优化dp了

关于斜率优化

T2:

究极大模拟,懒得打,鸽了

T3:

蒟蒻博主用的是记忆化搜索的方法,其实和抵制克苏恩那题思路很像,因为他的小球个数很少,颜色种数也很少,所以这是可行的,记搜时我们只需记录还有多少个1个的,2个的,3个的,和上一个选取的是剩几个的,然后这一次可能选剩1个的,2个的,3个的,如果这次选的和上次选的有可能一样就减掉一种可能,然后直接记搜就好了,数据范围需要高精,然而我没脸用int128水过。

技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 signed k[20],cnt[20];
 4 #define int __int128
 5 int f[20][20][20][20];
 6 int dfs(int i,int j,int k,int x){
 7     if(!i&&!j&&!k) return 1;
 8     if(f[i][j][k][x]) return f[i][j][k][x];
 9     int res=0;
10     if(i) res+=(i-(x==1))*dfs(i-1,j,k,0);
11     if(j) res+=(j-(x==2))*dfs(i+1,j-1,k,1);
12     if(k) res+=(k-(x==3))*dfs(i,j+1,k-1,2);
13     return f[i][j][k][x]=res;
14 }
15 void print(int x){
16     if(!x)return ;
17     print(x/10);
18     putchar(x%10+0);
19 }
20 signed main(){
21     signed n,sum=0;
22     scanf("%d",&n);
23     for(int i=1;i<=n;++i) scanf("%d",&k[i]),cnt[k[i]]++,sum+=k[i];
24     print(dfs(cnt[1],cnt[2],cnt[3],0));
25 }
color

 

CSP-S模拟测试 88 题解

原文:https://www.cnblogs.com/leom10/p/11763645.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!