HDU 2159

来源:互联网 发布:罗技c920驱动 mac 编辑:程序博客网 时间:2024/05/22 02:29

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159

就是背包问题,不过状态不好想,也是参考了别人的才写出来的,状态解释见:http://zc634579757.blog.163.com/blog/static/12449746220100301430970/

觉得还是挺巧妙的,想问题时学会逆向思维可能会有出乎意料的效果啊,贴代码

#include <iostream>#include <cstdio>using namespace std;const int maxn=100;int n,m,k,s;int e[maxn],p[maxn];///¾­ÑéºÍÈÌÄͶÈint d[maxn][maxn];int main(){    int h,i,j;    while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF)    {        for(i=0;i<k;i++)            scanf("%d%d",&e[i],&p[i]);        for(h=0;h<=m;h++)            for(i=0;i<=s;i++)                d[h][i]=0;        for(h=1;h<=m;h++)        {            for(i=1;i<=s;i++)                for(j=0;j<k;j++)                if(h>=p[j])                d[h][i]=max(d[h][i],d[h-p[j]][i-1]+e[j]);            if(d[h][s]>=n)                break;        }        printf("%d\n",m-h);    }    return 0;}



0 0