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

hdu 2159 二维完全背包

时间:2015-03-06 16:34:07      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:dp 完全背包

背景:二维数组为限制条件的完全背包,1Y。
思路:转移方程:F[i][j]=max{F[i][j],F[i-1][j-C[k]+W[k]},F[i][j]为在i为最大人数为i,最大忍耐度为j的情况下所能达到的最大经验值。一旦经验值达到目标要求经验值,就记录当前罪恶值,找出所有大到经验要求罪恶值中的最小罪恶值即可。

学习:进化仍然是转移方程的确立,背包类问题,按照模型进行变换就好。找到限制条件和物品选择,对限制条件进行拆分为每种可能的离散块。

我的代码:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int w[109],c[109],F[109][109];

int main(void){
    int n,m,k,s,ans;
    while(scanf("%d%d%d%d",&n,&m,&k,&s) == 4){
        ans=1e9;
        for(int i=0;i < k;i++) scanf("%d%d",&w[i],&c[i]);
        memset(F,0,sizeof(F));
        for(int t=0;t < k;t++){
            for(int j=c[t];j <= m;j++){
                for(int i=1;i <= s;i++){
                    F[i][j]=max(F[i][j],F[i-1][j-c[t]]+w[t]);
                    if(F[i][j] >= n){
                        if(j < ans) ans=j;
                    }
                }
            }
        }
        if(ans <= m) printf("%d\n",m-ans);
        else printf("-1\n");
    }
    return 0;
}


hdu 2159 二维完全背包

标签:dp 完全背包

原文地址:http://blog.csdn.net/jibancanyang/article/details/44101207

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