HDU-2159-FATE

来源:互联网 发布:软件界面设计要求 编辑:程序博客网 时间:2024/05/20 11:35

比较简单的多重背包问题,直接暴力即可

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=110;const int inf=1<<29;int n,m,k,s,a[maxn],b[maxn],dp[maxn][maxn];int main(){    while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF)    {memset(dp,0,sizeof(dp));for(int i=0;i<k;i++)    scanf("%d%d",&b[i],&a[i]);int ans=-1;for(int i=0;i<k;i++){    for(int j=a[i];j<=m;j++)    {for(int l=1;l<=s;l++){      dp[j][l]=max(dp[j][l],dp[j-a[i]][l-1]+b[i]);      if(dp[j][l]>=n)  ans=max(ans,m-j);}    }}printf("%d\n",ans);    }    return 0;}


原创粉丝点击