zoukankan      html  css  js  c++  java
  • 多维背包 hrbudt 1335 算法与追MM

    hrbust 1335
    #include<string.h>     //多进制储存数,第i位进制维back[i]+1,可以避免重复
    #include<stdio.h>
    using namespace std;
    int vl[100000];
    int w[105];
    int back[105];
    int v[105][10];
    int c[105];
    int n,m;
    int jinzhi[10];
    int main()
    {
    //freopen("input.txt","r",stdin);
    int z,ok,now;
    while(~scanf("%d%d",&n,&m))
    {
    memset(vl,0,sizeof(vl));
    for(int i=0;i<m;i++){
    scanf("%d",&back[i]);
    }
    for(int i=0;i<n;i++){
    scanf("%d",&w[i]);
    for(int k=0;k<m;k++){
    scanf("%d",&v[i][k]);
    }
    }
    jinzhi[0]=1;
    z=0;
    for(int i=0;i<m;i++){
    jinzhi[i+1]=jinzhi[i]*(back[i]+1);
    z+=back[i]*jinzhi[i];
    }
    for(int i=0;i<n;i++)
    {
    c[i]=0;
    for(int k=0;k<m;k++)
    {
    c[i]+=v[i][k]*jinzhi[k];
    }
    }
    for(int i=0;i<n;i++)
    {
    for(int k=z;k>=c[i];k--)
    {
    ok=0;
    now=k;
    for(int j=0;j<m;j++)
    {
    if(now%(back[j]+1)<v[i][j])
    {
    ok=1;
    break;
    }
    else
    now/=(back[j]+1);
    }
    if(ok==0)//printf("*");
    if(vl[k]<vl[k-c[i]]+w[i])
    vl[k]=vl[k-c[i]]+w[i];
    }
    }
    printf("%d
    ",vl[z]);
    printf("%d 
    ",z);
    for(int i=0;i<n;i++)
    printf("%d ",c[i]);
    }
    }
    View Code
  • 相关阅读:
    es6简述
    vue梳理
    webpack常用插件
    JS知识点
    CSS知识点
    224646
    223301
    图书馆 摘 1
    消息队列高手课 笔记6
    消息队列高手课 笔记5
  • 原文地址:https://www.cnblogs.com/icodefive/p/3599273.html
Copyright © 2011-2022 走看看