K题 多重背包

#include 
 #include 
 #include 
 using namespace std;
 #define MAX 300000
 int dp[MAX],v[1000],m[1000];
 int main()
 {
    int i,j,n,k;
    while(cin>>n&&n>=0)
    {
        int sum=0;
        for(i=1;i<=n;i++)
        {
            cin>>v[i]>>m[i];
            sum+=v[i]*m[i];
        }
            memset(dp,0,sizeof(dp));
            for(i=1;i<=n;i++)
                for(j=1;j<=m[i];j++)
                {
                    for(k=sum/2;k>=v[i]*j;k--)
                    {
                        if(dp[k]dp[sum/2])
                cout<

你可能感兴趣的:(杭电25道动态规划)