A:一类线性dp,时间卡的有点紧

  1. /*
  2. 定义 dp[t][i][j][k]代表填完前 t 个位置后,{0, 1, 2, 3} 这 4 个数字最后一次出现的位置,
  3. 排序后为 t, i, j, k(t > i > j > k) 的方案数目,则按照第 t 位的数字的四种选择,可以得
  4. 到四种转移。
  5. t选t-1这个位置的数:dp[t][i][j][k]
  6. t选i这个位置的数:dp[t][t-1][j][k]
  7. t选j这个位置的数:dp[t][t-1][i][k]
  8. t选k这个位置的数:dp[t][t-1][i][j]
  9. 枚举r[l]==t+1的所有条件,当且仅当满足所有条件时才进行转移
  10.  
  11. 最后的方案数=sum{dp[n]}
  12. 总时间复杂度 O(n4)。滚动一维,空间复杂度 O(n3)
  13. */
  14. #include<bits/stdc++.h>
  15. using namespace std;
  16. #define maxn 110
  17. #define ll long long
  18. #define mod 998244353
  19. ll dp[][maxn][maxn][maxn];
  20. int n,m;
  21. struct Node{
  22. int l,x;
  23. Node(){}
  24. Node(int l,int x):l(l),x(x){}
  25. };
  26. vector<Node>v[maxn];
  27.  
  28. inline void update(ll &a,ll b){
  29. a=(a+b);
  30. while(a>=mod)a-=mod;
  31. }
  32. int c;
  33. void solve(){
  34. c=;
  35. dp[c][][][]=;
  36. for(int t=;t<=n;t++){
  37. c^=;
  38. for(int i=;i<=t;i++)
  39. for(int j=;j<=i;j++)
  40. for(int k=;k<=j;k++)
  41. dp[c][i][j][k]=;
  42.  
  43. for(int i=;i<t;i++)
  44. for(int j=;j<=i;j++)
  45. for(int k=;k<=j;k++){
  46. update(dp[c][i][j][k],dp[c^][i][j][k]);
  47. update(dp[c][t-][j][k],dp[c^][i][j][k]);
  48. update(dp[c][t-][i][k],dp[c^][i][j][k]);
  49. update(dp[c][t-][i][j],dp[c^][i][j][k]);
  50. }
  51. for(int p=;p<v[t].size();p++){//枚举每个条件
  52. int l=v[t][p].l,x=v[t][p].x;
  53. for(int i=;i<t;i++)
  54. for(int j=;j<=i;j++)
  55. for(int k=;k<=j;k++){
  56. int cnt=;
  57. if(i>=l)cnt++;
  58. if(j>=l)cnt++;
  59. if(k>=l)cnt++;
  60. if(cnt!=x)dp[c][i][j][k]=;
  61. }
  62. }
  63. }
  64. }
  65.  
  66. int main(){
  67. //ios::sync_with_stdio(false);
  68. int t;cin>>t;
  69. while(t--){
  70. for(int i=;i<maxn;i++)v[i].clear();
  71.  
  72. scanf("%d%d",&n,&m);
  73. for(int i=;i<=m;i++){
  74. int l,r,x;
  75. scanf("%d%d%d",&l,&r,&x);
  76. v[r].push_back(Node(l,x));
  77. }
  78. solve();
  79. ll ans=;
  80. for(int i=;i<n;i++)
  81. for(int j=;j<=i;j++)
  82. for(int k=;k<=j;k++)
  83. ans+=dp[c][i][j][k],ans%=mod;
  84. cout<<ans<<'\n';
  85. }
  86. }

B:线性基前缀和,cf原题

C:待补

D:模拟,二分也可以做

E:队友过得,最短路最小割

F,G,H待补

I:字符串dp,调了半天才做出来

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 300005
  4. int cnt[maxn][],nxt[maxn][],pos[];
  5. int n,k,l[],r[],used[],up,down;
  6. char ans[maxn],s[maxn];
  7. int judge(int i,int pos){
  8. int res1=,res2;
  9. for(int j=;j<;j++){
  10. if(used[j]+cnt[pos][j] < l[j])return ;
  11. res1+=max(,l[j]-used[j]);//后面最少要的字符个数
  12. res2+=min(cnt[pos][j],r[j]-used[j]);//后面最多能的字符个数
  13. }
  14. if(res1>k-i || res2<k-i)return ;
  15. return ;
  16. }
  17. void init(){
  18. memset(used,,sizeof used);
  19. up=down=;
  20. memset(cnt,,sizeof cnt);
  21. memset(ans,,sizeof ans);
  22. }
  23.  
  24. int main(){
  25. while(scanf("%s%d",s+,&k)==){
  26. init();
  27. n=strlen(s+);
  28. for(int i=;i<;i++)scanf("%d%d",&l[i],&r[i]),up+=r[i],down+=l[i];
  29.  
  30. for(int i=n;i>=;i--){
  31. for(int j=;j<;j++)
  32. if(s[i]-'a'==j)cnt[i][j]=cnt[i+][j]+;
  33. else cnt[i][j]=cnt[i+][j];
  34. }
  35. int flag=;
  36. if(down>k || up<k){puts("-1");continue;}
  37. for(int i=;i<;i++)if(cnt[][i]<l[i]){puts("-1");flag=;break;}
  38. if(flag)continue;
  39.  
  40. for(int i=;i<;i++)pos[i]=n+;
  41. for(int i=n;i>=;i--){
  42. for(int j=;j<;j++)
  43. nxt[i][j]=pos[j];
  44. pos[s[i]-'a']=i;
  45. }
  46. for(int j=;j<;j++)nxt[][j]=pos[j];
  47.  
  48. int now=;
  49. for(int i=;i<=k;i++){
  50. for(int j=;j<;j++){//第i位选择j
  51. if(used[j]>=r[j])continue;
  52.  
  53. int tmp=nxt[now][j];
  54. used[j]++;
  55. if(judge(i,tmp+)){
  56. ans[i]=j;
  57. now=tmp;
  58. break;
  59. }
  60. else
  61. used[j]--;
  62. }
  63. }
  64.  
  65. for(int i=;i<=k;i++)cout<<(char)(ans[i]+'a');
  66. puts("");
  67. }
  68. }

JKLM:待补

2019 hdu多校1的更多相关文章

  1. 2019 HDU 多校赛第二场 HDU 6598 Harmonious Army 构造最小割模型

    题意: 有n个士兵,你可以选择让它成为战士还是法师. 有m对关系,u和v 如果同时为战士那么你可以获得a的权值 如果同时为法师,你可以获得c的权值, 如果一个为战士一个是法师,你可以获得b的权值 问你 ...

  2. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  3. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  4. 2015 HDU 多校联赛 5363 Key Set

    2015 HDU 多校联赛 5363 Key Set 题目: http://acm.hdu.edu.cn/showproblem.php? pid=5363 依据前面给出的样例,得出求解公式 fn = ...

  5. 2015 HDU 多校联赛 5317 RGCDQ 筛法求解

    2015 HDU 多校联赛 5317 RGCDQ 筛法求解 题目  http://acm.hdu.edu.cn/showproblem.php? pid=5317 本题的数据量非常大,測试样例多.数据 ...

  6. [HDU多校]Ridiculous Netizens

    [HDU多校]Ridiculous Netizens 点分治 分成两个部分:对某一点P,连通块经过P或不经过P. 经过P采用树形依赖背包 不经过P的部分递归计算 树型依赖背包 v点必须由其父亲u点转移 ...

  7. 【杂题总汇】HDU多校赛第十场 Videos

    [HDU2018多校赛第十场]Videos 最后一场比赛也结束了…… +HDU传送门+ ◇ 题目 <简要翻译> 有n个人以及m部电影,每个人都有一个快乐值.每场电影都有它的开始.结束时间和 ...

  8. hdu多校1002 Balanced Sequence

    Balanced Sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s) ...

  9. HDU多校(Distinct Values)

    Problem Description Chiaki has an array of n positive integers. You are told some facts about the ar ...

随机推荐

  1. vue ui 开启无效记录

    换了台电脑,输入vue ui 无法开启图形化界面 1.首先vue ui 没成功 我找到vue.cmd路径配置到环境变量依旧没有解决 然后使用vue -h 显示没有vue ui这个命令 重新安装npm ...

  2. PHP-全排列

    给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] ...

  3. nodejs express的基本用法

    demo /** * Created by ZXW on 2017/11/6. */ var express=require("express"); var server=expr ...

  4. 用JavaScript写一个JD放大镜

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Delphi COM对象

    作者:巴哈姆特  http://www.cnpack.org(转载请注明出处并保持完整) 如果没有接触过COM对象的话,你会觉得接口真的很麻烦,也许会有:“还不如直接定义一个类更方便”的想法. 的确, ...

  6. 【NOI2019模拟2019.6.29】字符串(SA|SAM+主席树)

    Description: 1<=n<=5e4 题解: 考虑\(f\)这个东西应该是怎样算的? 不妨建出SA,然后按height从大到小启发式合并,显然只有相邻的才可能成为最优答案.这样的只 ...

  7. PHP ftp_exec() 函数

    定义和用法 ftp_exec() 函数请求在 FTP 服务器上执行一个程序或命令. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_exec(ftp_connection ...

  8. springboot之停止与启动服务的脚本

    最近要开始自动化部署了,我们要编写杀死服务的脚本. 我在windows写好的脚本拷贝到linux,就是不行,好像是因为转义字符吧. 然后,我就手敲了这个下面脚本: pid=`ps -ef|grep / ...

  9. layui多图上传

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. spring--Springmvc中@Autowired注解与@Resource注解的区别

    Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...