ПИГБАНК - СПОЙ | неограниченный рюкзак - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь решить проблему в названии на SPOJ. Проблема легко распадается на неограниченный рюкзак. Я могу решить базовые тестовые случаи, и, по моему мнению, логика c выглядит нормально. Как только я отправляю, OJ выдает неправильный ответ. Куда я иду не так?

Вот код:

#include<bits/stdc++.h>
using namespace std;

typedef pair<int,int> ii;

int main(){
    int t;
    cin >> t;
    while(t--){
        int pig,pigWithMoney;
        cin >> pig >> pigWithMoney;
        int n = pigWithMoney-pig;
        int m;
        cin >> m;
        vector<ii> vii(m);
        for(int i=0; i<m; ++i){
            int  v,w;
            cin >> v >> w;
            vii[i] = {v,w};
        }
        vector<int> dp(n+1,INT_MAX);
        dp[0] = 0;
        for(int i=1; i<=n; ++i){
            for(int j=0; j<m; ++j){
                if(i-vii[j].second >=0 && dp[i-vii[j].second] != INT_MAX)
                    dp[i] = min(vii[j].first + dp[i-vii[j].second], dp[i]);
            }
        }
        if(dp[n] == INT_MAX)
            cout << "This is impossible." << endl;
        else
            cout << "The minimum amount of money in the piggy-bank is " << dp[n] << "." << endl;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...