hdu 1574 RP问题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1574
分析:01背包的变形。
RP可能为负,所以这里分两种情况处理一下就好。
初始化要注意。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define inf 0x3f3f3f3f int f[20001],th; int a,b,c; void dp() { f[10000]=0; if(a>0) { for(int i=b+10000;i>=0;i--) f[i+a]=max(f[i+a],f[i]+c); } else if(a<0) { for(int i=b+10000;i<20001;i++) f[i+a]=max(f[i+a],f[i]+c); } } int main() { int t,maxx; scanf("%d",&t); while(t--) { maxx=-inf; memset(f,-inf,sizeof(f)); scanf("%d",&th); for(int i=1;i<=th;i++) { scanf("%d%d%d",&a,&b,&c); dp(); } for(int i=0;i<20001;i++) maxx=max(maxx,f[i]); printf("%d ",maxx); } return 0; } //晕死,又因为初始化位置放错了找错误找半天!
疑问:
初学动态规划,一般是求解是从当前状态由前一个状态得来。一开始我就是这样写状态转移方程的。然而这一个题是当前状态求解下一个状态。
所以对于两者之间,有点困惑,大神求教!