我觉得我是意识模糊了,同样的错误犯了两次;
错误如下:
(1)状态转移方程 总是把 dp[j-a[i].p]+a[i].v 的 j 写为 m ,而且 i 写成 j
这个题:
给出物品数量N和手中资金M
然后每样物品给出价格P,需要购买时手中至少需要多少资金Q;既当前物品你有的钱P一定要大于Q(所以P-Q<0的就不考虑);还有物品本身的价值V
要求求出可以需求的最大资金
唯一的坑点就是P-Q排序了
结构体搞就行了;因为题中说了,不到多钱无法购买之类的,结构体保证了这一条件,和饭卡比较像
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std ;
struct node {
int p , q , v ;
}a[4000];
int dp[5000];
int cmp(node x ,node y)
{
return x.q-x.p<y.q-y.p;
}
int main()
{
int n , m , j , i;
while(cin>>n>>m)
{
for(i=0;i<n;i++)
{
cin>>a[i].p>>a[i].q>>a[i].v;
}
sort(a,a+n,cmp);
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
for(j=m;j>=a[i].q;j--)
{
if(dp[j]<dp[j-a[i].p]+a[i].v)
{
dp[j]=dp[j-a[i].p]+a[i].v;
}
}
}
cout<<dp[m]<<endl;
}
return 0 ;
}
各位晚安,QWQ困死我了,自动变红。。。