zoukankan      html  css  js  c++  java
  • Polycarp and Div 3 CodeForces

    这个题目其实很简单,有很多的方法写,然后我还是不会写,感觉自己好菜,

    我开始想的是dp,但是不知道怎么dp,看了网上题解,豁然开朗

    dp[i] 表示前面i个数满足条件的数有多少,f[s]表示前缀和为s的最大的满足条件的数

    if(a[i]==0) dp[i]=dp[i-1]+1;

    else dp[i]=max(dp[i-1],f[s]+1)

    知道这些就很简单了。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <queue>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <iostream>
    #include <map>
    #define inf 0x3f3f3f3f
    using namespace std;
    typedef long long ll;
    const int maxn = 2e5 + 10;
    ll dp[maxn], f[3];
    char s[maxn];
    int a[maxn];
    
    int main() {
    	scanf("%s", s + 1);
    	int len = strlen(s + 1);
    	for (int i = 1; i <= len; i++) a[i] = (s[i] - '0') % 3;
    	dp[0] = 0;
    	int sum = 0;
    	f[0] = 0;
    	f[1] = f[2] = -inf;
    	for (int i = 1; i <= len; i++) {
    		sum = (sum + a[i]) % 3;
    		if (a[i] == 0) dp[i] = dp[i - 1] + 1;
    		else dp[i] = max(dp[i - 1], f[sum] + 1);
    		f[sum] = max(f[sum], dp[i]);
    	}
    	printf("%lld
    ", dp[len]);
    	return 0;
    }
    

      

  • 相关阅读:
    Linux操作系统原理
    html标签简介(常用)
    Git常用命名
    Nuxt.js vue服务端渲染
    Sequelize 和 MySQL 对照Sequelize 和 MySQL 对照
    VScode 自定义用户代码块
    python对一个文本的解析
    API管理工具
    Flutter教程- Dart语言规范-知识点整理
    RESTful API
  • 原文地址:https://www.cnblogs.com/EchoZQN/p/11323753.html
Copyright © 2011-2022 走看看