#include #include #include #include #define maxn 105 #define maxm 1005 using namespace std; int n,m; int score[maxn],cost[maxn]; bool used[maxn][maxm]; int dp[maxn][maxm]; int track[maxn][maxm]; bool chosed[maxn]; bool init() { scanf("%d%d",&m,&n); for (int i=1;i<=n;++i) scanf("%d%d",&score[i],&cost[i]); } int Score,Cost,Sum; void solve() { memset(chosed,0,sizeof(chosed)); memset(track,0x3f,sizeof(track)); memset(used,0,sizeof(used)); memset(dp,0,sizeof(dp)); track[n+1][0]=0; Score=0,Cost=0,Sum=n*n; for (int i=n;i;--i) for (int j=0;j<=m;++j) { dp[i][j]=dp[i+1][j]; track[i][j]=track[i+1][j]; if (j>=cost[i]) { if (dp[i][j]==dp[i+1][j-cost[i]]+score[i]) { if (track[i][j]>=track[i+1][j-cost[i]]+i) { used[i][j]=1; track[i][j]=track[i+1][j-cost[i]]+i; } } if (dp[i][j]