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

AtCoder Beginner Contest 275 E F

时间:2022-10-30 12:46:15浏览次数:93  
标签:AtCoder const Beginner int ll long 275 dp define

E - Sugoroku 4

题意:从 0 走到 n ,有 k 次操作,每次会丢出一个骰子,骰子上的数字为\([1,m]\),等概率出现

问到达 n 的概率

思路:

\(dp[i][k]\)表示用了 k 次操作到达位置 i 的概率

题意说到如果当前的位置 + 骰子数字 超出 n 的话,是会折返的

初始化 \(dp[0][0]=1\)然后对每一次操作进行dp即可

#include<bits/stdc++.h>
#define ll  long long
#define int long long 
#define endl '\n'
using namespace std;
const int N=1e3+5;
const int mod=998244353;
const int inf=0x3f3f3f3f;
int n,m,K;
ll dp[N][N];
ll qpow(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1){
            res=res*a%mod;
        }
        b>>=1;
        a=a*a%mod;
    }
    return res;
}
// dp[i][j]
// j operations and now at the i
void solve(){
    cin>>n>>m>>K;
    if(m*K<n){
        cout<<0<<'\n';
        return;
    }
    dp[0][0]=1;
    ll ans=0;
    for(int k=1;k<=K;k++){
        for(int j=1;j<=m;j++){
            for(int i=0;i<n;i++){
                if(i+j<=n){
                    dp[i+j][k]+=dp[i][k-1]*qpow(m,mod-2)%mod;
                    dp[i+j][k]%=mod;
                }
                else {
                    dp[2*n-(i+j)][k]+=dp[i][k-1]*qpow(m,mod-2)%mod;
                    dp[2*n-(i+j)][k]%=mod;
                }
            }
        }
        ans+=dp[n][k];
        ans=ans%mod;
    }
    cout<<ans<<'\n';
}
signed main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int T = 1;
    // cin >> T;
    while(T--){solve();}
    
}

F - Erase Subarrays

题意:给出一个数组,问是否能通过删掉一些连续的子数组(操作一次即删掉一个连续子数组),剩下的数组之和为 x

若可以,求出最小操作次数,反之答案为-1

思路:

\(dp[i][j][k]\)表示操作前 i 个数字得到和为 j 的最小操作数,其中第三维是 0/1,1表示第i个不删

转移

\(dp[i][j][0]=dp[i-1][j][0]\)

\(dp[i][j][0]=dp[i-1][j][1]+1\)

\(dp[i][j][1]=dp[i-1][j-a[i]][0/1]\)

#include<bits/stdc++.h>
#define ll  long long
#define int long long 
#define endl '\n'
using namespace std;
const int N=3100;
const int mod=998244353;
const int inf=0x3f3f3f3f;
int n,m,k;
int a[N];
int dp[N][N][2];
void solve(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    // memset(dp,0x3f,sizeof(dp));
    for(int i=0;i<=n;i++){
        for(int j=0;j<=m;j++){
            dp[i][j][1]=dp[i][j][0]=inf;
        }
    }
    dp[0][0][1]=0;
    for(int i=1;i<=n;i++){
        for(int j=0;j<=m;j++){
            dp[i][j][0]=min(dp[i][j][0],dp[i-1][j][0]);
            dp[i][j][0]=min(dp[i][j][0],dp[i-1][j][1]+1);
            if(j-a[i]>=0){
                dp[i][j][1]=min(dp[i][j][1],dp[i-1][j-a[i]][0]);
                dp[i][j][1]=min(dp[i][j][1],dp[i-1][j-a[i]][1]);
            }
        }
    }

    for(int i=1;i<=m;i++){
        // if(dp[n][i])
        int minn=min(dp[n][i][1],dp[n][i][0]);
        if(minn==inf){
            cout<<-1<<'\n';
        }
        else cout<<minn<<'\n';
    }
}
signed main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int T = 1;
    // cin >> T;
    while(T--){solve();}
    
}

标签:AtCoder,const,Beginner,int,ll,long,275,dp,define
From: https://www.cnblogs.com/liang8/p/16840999.html

相关文章

  • 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\)全......
  • Atcoder Grand Contest 003(A~F)
    赛时打了80分钟,后来因为要处理一些私事就没再打,过掉了ABC,推了DE没推出来,不能算很差,但也不算很好。总结一下吧。赛时A一眼题,统计四个方向是否出现过,如果相对的两......
  • AtCoder Beginner Contest 247 E - Max Min
    题目描述简要描述:给定一个长度为\(N\)的数组,求数组的子数组满足最大值为\(X\)且最小值为\(Y\)的子区间的个数。做法1.ST表+二分时间复杂度:\(O(n\logn)\)......
  • AtCoder Beginner Contest 266 Ex Snuke Panic (2D)
    AtCoder传送门洛谷传送门考虑dp,\(f_i\)设在\(t_i\)时刻到达第\(i\)个点,能获得的最大收益。转移:\(f_i=f_j+a_i\),其中\(j\)能转移到\(i\)的充要条件有:\(......
  • AtCoder Beginner Contest 201 题解
    vp情况:过了A到E,F没时间也不会。vp总结:ABC表现可以。D慢了一点,写之前大概考虑清楚每个变量或函数的意义,结构明晰才能更快的写出代码。E花的时间太长,原因......
  • D - Div Game -- ATCODER
    D-DivGamehttps://atcoder.jp/contests/abc169/tasks/abc169_d参考:https://blog.csdn.net/justidle/article/details/106474626 思路计算n中所有质数的幂,No......
  • Atcoder Grand Contest 002(A~F)
    这场打的还算舒服(虽然DE好像很久以前做过谔谔),VP赛时切掉了A~D,不过E依旧没写出来,还是太逊啦!赛时A简单分类讨论,求\(a\)到\(b\)之间数的乘积,第一眼看成了和,痛......