luogu 1858

代码

//背包第K优解
//中间添加合并过程
//背包九讲
#include <cstdio>
#include <cstring>
using namespace std;
int f[5001][51];
int k,v,n;
int t[51];

int main(){
    memset(f,0xcf,sizeof(f));
    f[0][1] = 1;
    scanf("%d%d%d",&k,&v,&n);

    f[0][1] = 0;
    int a,b;
    for(int i =1;i<=n;i++){
        scanf("%d%d",&a,&b);
        for(int j=v;j>=a;j--){
            if(f[j-a][1]>=0){
                int p1 = 1,p2 = 1;
                for(int u=1;u<=k;u++){
                    t[u] = f[j][u];
                    if(f[j-a][p2] + b > t[p1])
                        f[j][u] = f[j-a][p2++]+b;
                    else
                        f[j][u] = t[p1++];
                }
            }
        }
    }
    int ans = 0;
    for(int i=1;i<=k;i++){
        ans+=f[v][i];
    }
    printf("%d\n",ans);

    return 0;
}
全部评论

相关推荐

北漂的牛马人:211佬,包进的,可能是系统问题
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务