scudiv spoj - getting wrong answer

please help why this code wrong answer on spoj …
#include<bits/stdc++.h>
using namespace std;

#define omax 23
#define nmax 81
#define INF 1000000003

typedef long long LL;

struct cylinder
{
int ovol;
int nvol;
int wt;
}cyl[1002];

LL dp[omax][nmax];
int oneed, nneed, n;

void solve()
{
for(int i=0;i<omax;i++)
{
for(int j=0;j<nmax;j++)
{
dp[i][j]=INF;
}
}
dp[0][0]=0;
for(int k=1;k<=n;k++)
{
for(int i=omax-1;i>=cyl[k].ovol;i–)
{
for(int j=nmax-1;j>=cyl[k].nvol;j–)
{
dp[i][j]=min(dp[i-cyl[k].ovol][j-cyl[k].nvol]+(LL)cyl[k].wt, dp[i][j]);
}
}
}
LL ans=INF;
for(int i=oneed;i<omax;i++)
{
for(int j=nneed;j<nmax;j++)
{
ans=min(ans, dp[i][j]);
}
}
printf("%lld\n", ans);
}

int main()
{
int test;
scanf("%d", &test);
while(test–)
{
scanf("%d %d", &oneed, &nneed);
scanf("%d", &n);
for(int i=1;i<=n;i++)
{
scanf("%d %d %d", &cyl[i].ovol, &cyl[i].nvol, &cyl[i].wt);
}
solve();
}
}

Try this, 1 2 2 2 1 1 1 2 2 50
The answer should be 50. You are not getting this…I hope this will help you.

post the ideone link and please explain your algorithm and also write comments so that it will be easy to debug