动态规划中逆序循环和顺序循环结果不一样,不知道什么原因,能不能解答一下?


#include<algorithm>
#include<iostream>
const int maxn = 6005;
using namespace std;
int w[maxn],c[maxn],s[maxn],f[maxn];
int main(){
    int n,m;
    cin>>n>>m;//奖品的种数,拨款金额 
    for(int i=1;i<=n;i++)  cin>>w[i]>>c[i]>>s[i];//第i种奖品价格,价值,最多购买的数量 
    //f[j]表示计划j元买奖品实现最大价值 
    for(int i=1;i<=n;i++){//从前i种奖品中挑选奖品放入背包 
        for(int j=0;j<=m;j++){//背包中奖品总价格为j 【逆序输出正确答案1040,顺序输出错误答案1650,望指点】
            for(int k=0;k<=s[i];k++){//其中背包中第i种奖品数量为k 
                if(j-k*w[i]>=0)//只有k个第i种奖品总价值小于或等于j元,k个第i种奖品才能放入背包 
                    f[j] = max(f[j],f[j-k*w[i]]+k*c[i]);
                //计划j元买奖品实现的最大价值=k个第i种奖品的总价值+计划j-k*w[i]元买奖品实现的最大价值 
            }
        }
    }
    cout<<f[m];
    return 0;
}

逆序你是咋写的呢?