首页 > 其他分享 >Codeforces Round 946 (Div. 3)

Codeforces Round 946 (Div. 3)

时间:2024-10-12 15:44:28浏览次数:7  
标签:946 Codeforces long int using Div Round

E. Money Buys Happiness

题意:给你\(m\)个月,每个月可以赚\(x\)元, 每个月你都有一次机会花费\(c_i\)元, 获得\(h_i\)的幸福。(当然你目前得有足够的钱)。 求出能够获得的最大幸福值。
思路:我们可以求出获得\(i\)幸福值所需的最小花费,然后判断能否有足够的钱即可。考虑如何求解, 把花费\(c_i\)看成物品价值,把\(h_i\)看成物品体积。那么容易发现,这个问题是一个\(01\)背包问题。那么状态转移就可以得到
f[j]=min(f[j],f[j-h[i]]+w[i])

代码

// Problem: E. Money Buys Happiness
// Contest: Codeforces - Codeforces Round 946 (Div. 3)
// URL: https://codeforces.com/contest/1974/problem/E
// Memory Limit: 256 MB
// Time Limit: 3000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
using ll=long long;
using i128=__int128;
typedef unsigned long long ull;
typedef pair<int, int> Pii;


const int Inf=0x3f3f3f3f;
void solve()
{
    ll m,x;cin>>m>>x;
    vector<ll>c(m+1),h(m+1);
    int ans=0; 
    int sum=0;
    for(int i=1;i<=m;i++)
    {
        cin>>c[i]>>h[i];
        sum+=h[i];
    }
    vector<ll>f(sum+1,1e18);
    f[0]=0;
    for(int i=1;i<=m;i++)
        for(int j=sum;j>=h[i];j--)
        {
            if(f[j-h[i]]+c[i]<=(i-1)*x)
            f[j]=min(f[j],f[j-h[i]]+c[i]);
        }
        
    for(int i=sum;i>=0;i--)
    {
        if(f[i]<=(m-1)*x)
        {
            cout<<i<<endl;
            return;
        }
    }


}


int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int _=1;cin>>_;while(_--)solve();
    return 0;
}

标签:946,Codeforces,long,int,using,Div,Round
From: https://www.cnblogs.com/Shumian/p/18460678

相关文章

  • Solution - Codeforces 622E Ants in Leaves
    首先因为\(1\)点是可以一次性到多个点的,因此不需要考虑\(1\)点的情况,而是转而分析\(1\)的每个子树的情况,最后取\(\max\)。那么对于每个子树,就有每个节点每个时刻至多存在\(1\)个点的性质了。考虑如何去求解。首先一个贪心的想法是肯定是每个蚂蚁越早到一个点越好。于......
  • VP CF975 div2
    前言别人说这场好,我就打打A简单模拟,分奇偶位置即可。B一开始没注意到端点的边界问题,后来分讨了一下,把端点和中间的点分开考虑即可C卡了1h的唐题,首先由于每堆中不能出现同种卡牌,所以答案一定<=n。当时想到这就开二分答案了,发现k=0的情况过不了,以为是特殊边界问题,直接特......
  • Codeforces Round 932 (Div. 2) C. Messenger in MAC
    对于选定的\(p_i\)的情况下,如何使得代价小?显然是按照\(b\)升序的方式。因此我们可以考虑按照\(b\)进行排序。考虑一种贪心的做法,我们枚举区间\([l,r]\),这样区间的必选就是\(a_l,a_r,(b_r-b_l)\),因此我们可以贪心的选择剩下\(a\)中的最小值。这样复杂度是\(O(n^3\logn)\)。考......
  • 前端Vue中如何将Div元素内容转换为图片?html2canvas库助你轻松实现!
    前端在Vue3中,如果你需要将一个div元素的内容转换成图片,可以使用一个高效且流行的库——html2canvas。这个库能够帮助你将DOM元素渲染为Canvas,并进一步将Canvas转换为图片,非常适合在Vue项目中使用。原文可查看在线演示地址:张苹果博客一,安装html2canvasnpminst......
  • Codeforces Round 975 (Div. 2)
    Codeforces975div2A.MaxPlusSize点击查看代码voidsolve(){intn;cin>>n;intimax1=0,imax2=0;for(inti=1;i<=n;i++){intx;cin>>x;if(i%2)imax1=max(imax1,x);elseimax2=max(imax2,x);}if(!n%2)cout......
  • Codeforces Round 972 (Div. 2)题解记录
    A.SimplePalindromeaeiou,如果这里后面+u则会多出2,+o则会多3,通过分析加相同的字母比加之前存在的不同字母赚发现同一个太多了,又会增太大,遂平均分配,使增多幅度上升的缓慢#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;llgcd(llx,lly){ if(y==0) r......
  • Codeforces Round 977 (Div. 2)(B-C2)
    B:感觉最近几题都用了这种继承的思想。然后就把n方转化为一个递推的问题。我写了一个跟题解不同的做法是取同余也挺巧妙的。#include<bits/stdc++.h>usingnamespacestd;#defineCIconstint&#defineintlonglongconstintmaxn=2e5+10;inta[maxn],vis[maxn],cnt[max......
  • cf2009 Codeforces Round 971 (Div. 4)
    A.Minimize!签到题。计算\((c-a)+(b-c)\)的最小值,其实值固定的,等于\(b-a\)。inta,b;voidsolve(){cin>>a>>b;cout<<b-a<<endl;}B.Osu!mania签到题。给定一个4k下落式的网格,求#下落顺序。直接数组记录就好了。intn;constintN=500;chars[......
  • codeforces round 974(div.3)E(优先队列实现dijstra算法,devc++的优先队列用greater报
    解题历程:看到两边同时移动,计算最终的相遇时间,我就想到两边同时计算各点到起点的最短距离,就是使用dijstra算法,最后所有节点取两次计算的最大值,再对所有节点取最小值,就是最终答案了,可是这个思路没有考虑有马的情况,思考一番后发现可以多列一个数组记录有马的情况下的行走最短路,然后......
  • Codeforces Round 804 (Div. 2)(C - D)
    CC观察题意,模拟样例,首先\(0\)不能动,因为相邻的\(mex\)会改变,然后\(1\)也是如此,所以我们固定了\(0\)和\(1\),设两个指针\(l\)和\(r\)表示固定的位置,那么此时在他们两个中间的数可以随便移动,假设有\(x\)个空位,那么如果\(2\)在里面,\(2\)的选......