首页 > 其他分享 >AtCoder Beginner Contest 275 D~F

AtCoder Beginner Contest 275 D~F

时间:2022-10-31 16:56:27浏览次数:87  
标签:AtCoder const Beginner int 275 using mod dp define

D - Yet Another Recursive Function

思路:直觉需要用到的数字大多数是重复的,所以记忆化了一下,测了一下 1e18 的数据,跑的飞快,直接交了,6ms。

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb emplace_back
using namespace std;
using ll = long long;
using PII = pair<int, int>;
const int N = 2e5 + 10;
const int mod = 1e9 + 7;

map <ll, ll> s;
ll dfs(ll x) {
    if(s.count(x))
        return s[x];
    else {
        s[x] = dfs(x / 2) + dfs(x / 3);
        return s[x];
    }
}
void solve() {
    s[0] = 1;
    ll x;
    cin >> x;
    cout << dfs(x);
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int t;
    t = 1;
    
    while(t--) {
        solve();
    }
}

E - Sugoroku 4

思路:一个很简单的概率 dp,我不懂概率期望也会做……就对每一步分析,每个位置到能走到的位置的概率是均分的,dp 转移一下即可。

代码:

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb emplace_back
using namespace std;
using ll = long long;
using PII = pair<int, int>;
const int N = 2e5 + 10;
const int mod = 998244353;

int n, m, k;
void solve() {
    cin >> n >> m >> k;
    vector<ll> dp(n + 1);
    dp[0] = 1;
    for(int i = 1; i <= k; i++) {
        vector<ll> ndp(n + 1);
        for(int j = 0; j < n; j++) {
            for(int z = 1; z <= m; z++) {
                int to = j + z;
                if(to > n)
                    to = n - (to - n);
                ndp[to] = (ndp[to] + dp[j] * qpow(m, mod - 2) % mod) % mod;
            }
        }
        ndp[n] = (ndp[n] + dp[n]) % mod;
        dp = ndp;
    }
    cout << dp[n];
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int t;
    t = 1;
    
    while(t--) {
        solve();
    }
}

F - Erase Subarrays

思路:也是一个 dp,三维的状态,第三维 0 和 1 分别表示走到这个位置和不走这个位置,然后就是简单的 dp 转移了,具体实现可以看代码。

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb emplace_back
using namespace std;
using ll = long long;
using PII = pair<int, int>;
const int N = 2e5 + 10;
const int mod = 1e9 + 7;

int n, m;
int a[N];
int dp[3010][3010][2];
void solve() {
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    memset(dp, 0x3f, sizeof dp);
    dp[0][0][0] = 0;
    for(int i = 1; i <= n; i++) {
        for(int j = 0; j <= m; j++) {
            if(j + a[i] <= m) {
                dp[i][j + a[i]][0] = min(min(dp[i - 1][j][0], dp[i - 1][j][1]), dp[i][j + a[i]][0]);
            }
            dp[i][j][1] = min(min(dp[i - 1][j][1], dp[i - 1][j][0] + 1), dp[i][j][1]);
        }
    }
    for(int i = 1; i <= m; i++) {
        int res = min(dp[n][i][0], dp[n][i][1]);
        if(res > 1e6)
            cout << "-1\n";
        else 
            cout << res << '\n';
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int t;
    t = 1;
    
    while(t--) {
        solve();
    }
}

 

标签:AtCoder,const,Beginner,int,275,using,mod,dp,define
From: https://www.cnblogs.com/Leonard7/p/16844908.html

相关文章

  • C - Counting Squares -- ATCODER
    C-CountingSquareshttps://atcoder.jp/contests/abc275/tasks/abc275_c参考:https://atcoder.jp/contests/abc275/submissions/36103954 思路首先不能使用暴力穷......
  • 【atcoder 293 F - Erase Subarrays】【动态规划】
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMain{publicstaticvoidmain(String[]args)......
  • Atcoder ABC 273、 272、271的C、 D
    ABC273C(K+1)-thLargestNumber题意:给予你一个长度是N的数组a,对于每一个k(0,1,2,...N-1),完成一下问题:找到1~N中的数字a[i],找到大于a[i]的数目恰好是k个不同数的......
  • Atcoder试题乱做 Part5
    名言,解决不了题目,那就解决你自己./ybyb\(\text{[ARC136E]Non-coprimeDAG}\)\(\color{blue}{\text{[NORMAL]}}\)考虑\(i\)什么时候能到达\(j\),令\(f_x\)......
  • 【atcoder 293 E - Sugoroku 4】【动态规划,递推】
    importjava.io.IOException;importjava.util.Arrays;importjava.util.Scanner;publicclassMain{staticintn,m,k;staticintMOD=998244353;......
  • AtCoder Beginner Contest 275 E F
    E-Sugoroku4题意:从0走到n,有k次操作,每次会丢出一个骰子,骰子上的数字为\([1,m]\),等概率出现问到达n的概率思路:\(dp[i][k]\)表示用了k次操作到达位置i的概......
  • Atcoder Beginner Contest 275(A~F)
    我好菜啊……又没切掉F,40+min切掉A~E成功滚粗。希望能越打越好吧……赛时A求序列最大值,B简单计算,C数正方形,跳过。D递推不太行,N的范围有点大。但是除法的转移......
  • AtCoder Beginner Contest 275
    咕咕咕咕咕咕。G-InfiniteKnapsack做法1-二分假设第\(i\)个物品选了\(x_i\)个,\(x_i\)为非负整数,有\[\lim_{x\to+\infin}\frac{f(x)}{x}=\frac{\sum_ic_......
  • AtCoder Regular Contest 060
    F题有循环节,一看就有KMP,比较难,太晚了,早上起来再补。C-TakandCards\(n\)个整数\(a_1\sima_n\),问有多少种选数方案,使得选出来的数平均值为\(A\)。\(1\len,a_i......
  • AtCoder Regular Contest 059
    EducationalDPRound(确信C-BeTogether给定\(n\)个数\(a_{1}\sima_n\),你至多可以对每个\(a_i\)操作一次,以\((a_i-y)^2\)的代价令\(a_i\getsy\),求\(a\)全......