nyoj第49题http://acm.nyist.net/JudgeOnline/problem.php?pid=49
动态规划,递推关系式(动态转移方程)为v*p+a[j-v]>a[j]?a[j]=v*p+a[j-v]:0;
用一维滚动数组做01背包问题,只能逆向进行。
#include<iostream>
#include<stdio.h>
#include<memory.h>
using namespace std;
int main(){
int k;
cin>>k;
while(k--){
int j,i,tol,m,a[30005];
memset(a,0,sizeof(a));
cin>>tol>>m;
for(i=0;i<m;i++){
int v,p;
cin>>v>>p;
for(j=tol;j>=v;j--){
if(v*p+a[j-v]>a[j])
a[j]=v*p+a[j-v];
}
}
cout<<a[tol]<<endl;
}
system("pause");
return 0;
}