首页 > 其他分享 >Educational Codeforces Round 122 (Rated for Div. 2),C,D

Educational Codeforces Round 122 (Rated for Div. 2),C,D

时间:2022-12-25 14:01:08浏览次数:65  
标签:Educational Rated int Codeforces long maxn hm yes include

Educational Codeforces Round 122 (Rated for Div. 2),C,D

C

C

这道题就是普通的暴力,但是我在做的过程中第10组数据出现了数据溢出的错误

我的错误代码,我在vp的时候没觉得有什么问题

#include <iostream>
using namespace std;
#define int long long 
int t,k,w,a,hc,dc,hm,dm;
void solve()
{
    cin>>hc>>dc>>hm>>dm;
    cin>>k>>w>>a;
    bool yes=false;
    for (int i=0;i<=k;i++)
    {
        int h=hc+i*a;
        int d=dc+(k-i)*w;
        int cnt=(h+dm-1)/dm;
        if (cnt*d>=hm)
        {
            yes=true;
            break;
        }
    }
    if (yes)
    {
        cout<<"YES\n";
    }
    else 
    {
        cout<<"NO\n";
    }
    return ;
}
signed main ()
{
    cin>>t;
    while (t--)
    {
        solve();
    }
    system ("pause");
    return 0;
}

后来看的正确的代码,他换了一种表达方式,可能也有不同之处吧

正确代码

#include <iostream>
using namespace std;
#define int long long 
int t,k,w,a,hc,dc,hm,dm;
void solve()
{
    cin>>hc>>dc>>hm>>dm;
    cin>>k>>w>>a;
    bool yes=false;
    for (int i=0;i<=k;i++)
    {
        int h=hc+i*a;
        int d=dc+(k-i)*w;
        int cnt=(h+dm-1)/dm;
        int cnt2=(hm+d-1)/d;
        if (cnt>=cnt2)
        {
            yes=true;
            break;
        }
    }
    if (yes)
    {
        cout<<"YES\n";
    }
    else 
    {
        cout<<"NO\n";
    }
    return ;
}
signed main ()
{
    cin>>t;
    while (t--)
    {
        solve();
    }
    system ("pause");
    return 0;
}

D

D

这一个题目大意就是有一个长度为n的数组,一开始全是1,我们需要把数组每一位变成题目里面给出的b[i],如果成功了,我们就可以获得c[i]的价值,问我们最多可以得到多少价值,变化是把a[i]=(a[i]+a[i]/x),x是任意数,这是一场操作,总共有k次操作(这一部分像不像一个背包问题,问总共有k空间,问背包最多可以获得的价值),不过我们还需要知道让1变成a[i]的“空间”是多大,我们可以看到a[i]的范围是1到1e3,那么这个问题就很好办了,我们可以提前暴力求出每一个1变成a[i]的“空间”大小,我这里用f[i]表示,求出这个,后面就是经典的背包问题了

#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
const int maxn=1e6+10;
//#define int long long 
int t,n,k,f[maxn],a[maxn],b[maxn],dp[maxn];
void init()
{
    for (int i=1;i<=1000;i++)//记得一定要预处理,后面要求Min
    {
        f[i]=1e9;
    }
    f[1]=0;
    for (int i=1;i<=1000;i++)
    {
        for (int j=1;j<=i;j++)
        {
            f[i+i/j]=min(f[i+i/j],f[i]+1);
        }
    }
    return ;
}
void solve()
{
    cin>>n>>k;
    for (int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for (int i=1;i<=n;i++)
    {
        cin>>b[i];
    }
    for (int i=0;i<=k+10;i++)
    {
        dp[i]=0;
    }
    for (int i=1;i<=n;i++)//把这些看成是一个简单的背包问题,f[a[i]]是a[i]的空间,b[i]是a[i]的价值
    {
        for (int j=k;j>=f[a[i]];j--)
        {
            dp[j]=max(dp[j],dp[j-f[a[i]]]+b[i]);
        }
    }
    cout<<dp[k]<<'\n';
    return ;
}
signed main ()
{
    cin>>t;
    init();
    while (t--)
    {
        solve();
    }
    system ("pause");
    return 0;
}

标签:Educational,Rated,int,Codeforces,long,maxn,hm,yes,include
From: https://www.cnblogs.com/righting/p/17003962.html

相关文章

  • Codeforces Round #589 (Div. 2) D
    D.CompleteTripartite题链与其他题解不同我首先发现的是没有相连的一定是同一组那么我们直接对于整个数组遍历一遍将与1同组的搞出来要是下一个位置已经有组了我......
  • Codeforces Round #770 (Div. 2)B,C
    CodeforcesRound#770(Div.2)B,C还是惨绝人寰的只做了一个题,ε=(´ο`*)))唉BB这一道题大意是是首先有一个d,然后有n个操作,从1到n,每一次我们都需要选择让d=d+a[i]还是d......
  • Codeforces 1097 G Vladislav and a Great Legend 题解 (DP)
    题目链接思路首先看到这种求\(x^k\)形式的,直接无脑转下降幂:\(x^k=\sum_{i=1}^kS2(k,i)\cdotx^{\underline{i}}\),其中\(S2\)表示第二类斯特林数,\(x^{\underlinei}\)表......
  • Codeforces 1097 G Vladislav and a Great Legend 题解 (DP)
    题目链接思路首先看到这种求\(x^k\)形式的,直接无脑转下降幂:\(x^k=\sum_{i=1}^kS2(k,i)\cdotx^{\underline{i}}\),其中\(S2\)表示第二类斯特林数,\(x^{\underlinei}\)表......
  • Codeforces 1097 G Vladislav and a Great Legend 题解 (DP)
    题目链接思路首先看到这种求\(x^k\)形式的,直接无脑转下降幂:\(x^k=\sum_{i=1}^kS2(k,i)\cdotx^{\underline{i}}\),其中\(S2\)表示第二类斯特林数,\(x^{\underlinei}\)表......
  • Codeforces 1097 G Vladislav and a Great Legend 题解 (DP)
    题目链接思路首先看到这种求\(x^k\)形式的,直接无脑转下降幂:\(x^k=\sum_{i=1}^kS2(k,i)\cdotx^{\underline{i}}\),其中\(S2\)表示第二类斯特林数,\(x^{\underlinei}\)表......
  • Codeforces Round #836 (Div. 2)构造场
    今天的CF居然是这样的全是构造题,顺便把牛客上的一道构造写了C题待补链接......
  • Codeforces 1630 E Expected Components 题解 (组合数学)
    题目链接首先明确概念:排列。指的就是一个把数组a重排得到的序列,两个排列相等当且仅当它们对应位全都相等环形排列。指的是把数组a重排得到的序列首尾相接得到的环形数......
  • Codeforces Global Round 24(B,C)
    CodeforcesGlobalRound24(B,C)这一次vp真是大失所望,我只写了A,第二题最后发现离那个答案很近了,但就是没想到,看来还是功力不到家呀B这道题的大意是有一个数组,我们可......
  • Educational DP Contest G - Longest Path (dfs+dp)
    https://atcoder.jp/contests/dp/tasks/dp_g题目大意:给定n个点,m条有向边(确定无环),问最长路径是多少?SampleInput1451213322434SampleOutput13#......