码迷,mamicode.com
首页 > 其他好文 > 详细

杂题训练之三

时间:2019-10-09 09:20:58      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:www   void   模板   using   else   模板题   代码   gis   define   

https://www.luogu.org/problem/P1858

模板题,套路东西,思路代码里,很清晰,很明了

code :

#include<bits/stdc++.h>
#define IL inline
#define RI register int
using namespace std;
IL void in(int &x)
{
    int f=1;x=0;char s=getchar();
    while(s>'9' or s<'0'){if(s=='-')f=-1;s=getchar();}
    while(s>='0' and s<='9'){x=x*10+s-'0';s=getchar();}
    x*=f;
}
int k,v,n,ans,cnt,now[55];
int V[288],W[288],f[5008][55];
int main()
{
    in(k),in(v),in(n);
    for(RI i=0;i<=5000;i++)
        for(RI j=0;j<=50;j++)f[i][j]=-20021003;//赋初值为-inf
    f[0][1]=0;//体积为0的最优解为0.
    for(RI i=1;i<=n;i++)
        in(V[i]),in(W[i]);//V[i]为体积,W[i]为价值.
    for(RI i=1;i<=n;i++)
        for(RI j=v;j>=V[i];j--)
        {
            int c1=1,c2=1,cnt=0;
            while(cnt<=k)
            {
                if(f[j][c1]>f[j-V[i]][c2]+W[i])
                now[++cnt]=f[j][c1++];
                else now[++cnt]=f[j-V[i]][c2++]+W[i];
            }
            //这里选择了开数组记录当前最优解的值,在下面直接赋值给f[j]即可。
            for(RI c=1;c<=k;c++)f[j][c]=now[c];
        }
    for(RI i=1;i<=k;i++)ans+=f[v][i];
    printf("%d",ans);
}

杂题训练之三

标签:www   void   模板   using   else   模板题   代码   gis   define   

原文地址:https://www.cnblogs.com/wzxbeliever/p/11639431.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!