hdu 2159 FATE

来源:互联网 发布:越南政治 知乎 编辑:程序博客网 时间:2024/06/05 07:59


二维背包问题, 利用背包的最优思想逐步取最优

感觉还是对背包的思维不熟练

#include <iostream>
#include <cstring>
using namespace std;
#define N 110
int dp[N][N];
struct node
{
    int jy, rn;
}p[N];


int main()
{
    int n, m, k, s;
    while(cin>>n>>m>>k>>s)
    {
        memset(dp,0,sizeof(dp));
        for(int i=0;i<k;i++)
        {
            cin>>p[i].jy>>p[i].rn;
        }
        for(int i=0;i<k;i++)
        {
            for(int j=p[i].rn;j<=m;j++)
            {
                for(int q=1;q<=s;q++)
                {
                    if(dp[j][q]<dp[j-p[i].rn][q-1]+p[i].jy)
                    {
                        dp[j][q]=dp[j-p[i].rn][q-1]+p[i].jy;
                    }
                }
            }
        }
        int flag=0;
        for(int i=0;i<=m;i++)
        {
            if(dp[i][s]>=n)
            {
                flag=1;
                cout<<m-i<<endl;
                break;
            }
        }
        if(flag==0)
        {
            cout<<-1<<endl;
        }
    }
    return 0;
}

0 0
原创粉丝点击