首页 > 其他分享 >CodeForces-189A Cut Ribbon-必须装满的背包

CodeForces-189A Cut Ribbon-必须装满的背包

时间:2022-09-22 13:11:24浏览次数:57  
标签:Cut maxw int max 装满 CodeForces 189A 背包 dp

题意:

给定n,

s.t.  a1*x1+a2*x2+a3*x3=n(1)

max:x1+x2+x3

对比完全背包,(1)式取等号而不是<=

这个差别影响了我们的结果

比如:

n=7,a1=a2=5,a3=2

如果按照完全背包的转移:

则在dp[7]=3,也就是2+2+2

但背包并没有装满

装满的方案是:dp[7]=2,也就是2+5

那么我们在枚举容量的时候,不能去涉及那些减不完的状态

我们只能枚举,j=2(=4=6),h=5,这时就避免了:dp[5]=max(dp[5],dp[5-2]+1)=2,因为3是没办法凑满的

设置初始量为-1,dp[0]=0->dp[2]=max(dp[2],dp[2-2]+1),这时候需要dp[0]=0

#include<bits/stdc++.h>
using namespace std;
const int maxw=4e3+1e1;
int w[3],dp[maxw];

int main()
{
    int n;cin>>n;
    for(int i=0;i<3;i++)cin>>w[i];
    fill(dp,dp+maxw,-1);
    dp[0]=0;
    for(int i=0;i<3;i++)
    {
        for(int j=w[i];j<=n;j++)
        {
            if(dp[j-w[i]]!=-1)
            {
                dp[j]=max(dp[j],dp[j-w[i]]+1);
            }
        }
    }
    cout<<dp[n]<<"\n";
    return 0;
}

 

标签:Cut,maxw,int,max,装满,CodeForces,189A,背包,dp
From: https://www.cnblogs.com/FeiShi/p/16718876.html

相关文章

  • These 30 keyboard shortcuts are guaranteed to save you time in After Effects.
    These30keyboardshortcutsareguaranteedtosaveyoutimeinAfterEffects.  https://www.logickeyboard.com/shortcut/AECC2017.html ......
  • Codeforces Round #813 (Div. 2) - D. Empty Graph
    构造Problem-D-Codeforces题意给\(n(1<=n<=10^5)\)个点,与权值\(a_i\),这\(n\)个点组成一个完全图,\(a_l\)与\(a_r\)连的边的权值为\(min(a_l,a_{l+1}...a_{r......
  • Codeforces Round #821 (Div. 2) D E
    E首先发现无论何时,每个位置上至多只会有一个球。原因:每个时刻每个球都会移动,所以移动到某个点的时间一定,自然出生时间也一定,显然不可能会有2个点出生时间相同。既然如......
  • Educational Codeforces Round 119 E
    E.ReplacetheNumbers开始想到了一个二分的做法好像是O(nlog)的后来才想了一下可以在两个数组之间反复横跳那我是不是像记忆化搜索一样记录一个路径即可我们记录f[i]......
  • Codeforces Round #818 (Div. 2) - D. Madoka and The Corruption Scheme
    思维+组合数学Problem-D-Codeforces题意有\(2^n\)个人进行锦标赛,编号1~\(2^n\),每一场输的人失去比赛资格,赢的人继续。Madoka可以选择他们进行的顺序,以及决定哪一......
  • Codeforces 821 Div2
    T1:大小为n的数组,最多进行k次操作:下标模k意义下相等则可进行交换。求操作后连续k个元素的最大值固定最大值的k个连续因素小标为[0,k),现在只需使得它为最大即可,将可交换位......
  • Codeforces Round #821 (Div. 2) - D2. Zero-One (Hard Version)
    区间DPProblem-D2-Codeforces题意给一个长度为\(n(5<=n<=5000)\)的01串,每次操作可选择一个\(l,r(l<r)\),把\(s[l],s[r]\)反转。如果\(l+1==r\),花费为x,否......
  • Codeforces Round #807 (Div. 2) - D. Mark and Lightbulbs
    思维Problem-D-Codeforces题意给两个长度为\(n(3<=n<=2*10^5)\)的01串s与t,求最小操作次数,使s变成t;不存在则输出-1操作为:对于2<=i<=n-1,若\(s_......
  • Codeforces Round #820 (Div. 3) G. Cut Substrings
    DPProblem-G-Codeforces题意给一个长度为\(n(1<=n<=500)\)的主串s,一个长度为\(m(1<=m<=500)\)的模式串t,每次可以将当前的s中与t相同的子串变成一串"."(如......
  • Codeforces Round #821 (Div. 2) ABCD1
    A.ConsecutiveSumhttps://codeforces.com/contest/1733/problem/A题目大意:给定一个长度为n的数组a。最多可以执行k次以下操作:选择两个指数i和j,其中imodk=jmodk......