Thankyou for the testcase 
But still I’m getting WA
#include
#include
#include
using namespace std;
bool sort2(const pair<int, int>& a, pair<int, int>& b)
{
if (a.first > b.first)
return true;
else if (a.first == b.first)
{
return (a.second < b.second);
}
else
return false;
}
int max(int a, int b)
{
return (a > b) ? a : b;
}
void knapsack(int W,vector<pair<int,int>> v,int n) //weight,profit
{
int k[101][501];
for (int i = 0; i <=n; i++)
{
for (int w = 0; w <= W; w++)
{
if (i == 0 || w == 0)
k[i][w] = 0;
else if (w >= v[i-1].first)
{
k[i][w] = max(k[i - 1][w], v[i-1].second + k[i - 1][w - v[i-1].first]);
}
else
k[i][w] = k[i - 1][w];
}
}
int i = n, bal=k[n][W],w=W,sum=0;
while (bal > 0 && i >= 0)
{
if (bal == k[i - 1][w])
{
if (k[i][v[i-1].first] == bal && k[i][v[i-1].first-1]!=bal)
{
//do nothing
}
else
{
i--;
continue;
}
}
sum += v[i-1].first;
bal = bal - v[i - 1].second;
w = w - v[i - 1].first;
i--;
}
cout << sum << " " << k[n][W] << endl;
}
int main()
{
int W, n;
cin >> W >> n;
while (n!=0 || W!=0)
{
vector<pair<int, int>> v; //v[weight,int]
for (int i = 0; i < n; i++)
{
int w, p;
cin >> w >> p;
v.push_back(make_pair(w, p));
}
sort(v.begin(), v.end(),sort2);
knapsack(W, v, n);
cin >> W >> n;
}
}