此题是一个背包的题目,刚开始我并没有作任何的排序工作,所以出来的结果总是错的,仔细想想也确实是不对的,因为q[i]会限制dp[i]的值的变化。虽然我知道要按照某个量进行排序,对原数据进行处理,但是实在是想不到到底要处理那个数据。于是看了一下大神的博客,原来是要对q-p进行从小到大的排序。对于原因我也是不太懂。。。
#include"iostream"#include"stdio.h"#include"cmath"#include"algorithm"#include"string.h"using namespace std;#define mx 5005int dp[mx];struct node{ int p,q,v,l;}thing[mx];bool cmp(const node a,const node b ){ if(a.l!=b.l) return a.l>thing[i].p>>thing[i].q>>thing[i].v; thing[i].l=thing[i].q-thing[i].p; } sort(thing+1,thing+n+1,cmp); memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { if(thing[i].q>m) continue; for(j=m;j>=thing[i].q;j--) { if(dp[j]