01背包

来源:互联网 发布:三星note3破解4g网络 编辑:程序博客网 时间:2024/06/06 06:40

这是noip的基本功。

题目:N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。


解答:# include "iostream"
# include "cstdio"
using namespace std;

int
    w[1000001],
    c[1000001];   

int
    f[1001];

int main() {
    
    int i,j,m,n;
    int sc;   

    //freopen("package.in","r",stdin);
    //freopen("package.out","w",stdout);
    cin>>m;
    cin>>n;

    sc = 0;
    for ( i=1; i<=n; i++ ) {
        cin>>w[i];
        sc += w[i];
        cin>>c[i];
    }//输入

    for (i=1; i<=n; i++) {//代价
        for ( j=w[i]; j<=m; j++ ) { //最大的价值
            if(f[j-w[i]]+c[i]>f[j]){
                f[j]=f[j-w[i]]+c[i];//看看这个是取还是不取,取最大值
            }
        }
    }

    printf("%d",f[m]);//输出
    
    return 0;
    
}

原创粉丝点击