xhz0311 @ 2023-10-04 14:14:56
#include <bits/stdc++.h>
using namespace std;
int n,m,tv,tw,opt,c;
struct node
{
int V,W;
int v[6],w[6],cnt=0;
} a[32005];
int dp[32005];
int main()
{
scanf("%d %d",&n,&m);
while (m--)
{
scanf("%d %d %d",&tv,&tw,&opt);
if (opt==0)
{
c++;
a[c].V=tv;
a[c].W=tv*tw;
}
else
{
a[opt].cnt++;
a[opt].v[a[opt].cnt]=tv;
a[opt].w[a[opt].cnt]=tv*tw;
}
}
for (int i=1; i<=c; i++)
{
for (int j=n; j>=a[i].V; j--)
{
dp[j]=max(dp[j],dp[j-a[i].V]+a[i].W);
if (j>=a[i].V+a[i].v[1])
{
dp[j]=max(dp[j],dp[j-a[i].V-a[i].v[1]]+a[i].W+a[i].w[1]);
}
if (j>=a[i].V+a[i].v[2])
{
dp[j]=max(dp[j],dp[j-a[i].V-a[i].v[2]]+a[i].W+a[i].w[2]);
}
if (j>=a[i].V+a[i].v[1]+a[i].v[2])
{
dp[j]=max(dp[j],dp[j-a[i].V-a[i].v[1]-a[i].v[2]]+a[i].W+a[i].w[1]+a[i].w[2]);
}
}
}
cout<<dp[n];
return 0;
}
WA on #3
输入:
2000 10
500 1 0
400 4 0
300 5 1
400 5 1
200 5 0
500 4 5
400 4 0
320 2 0
410 3 0
400 3 5
正确输出
7430
我的代码输出 7200。
求调。
by _Initialize_ @ 2023-10-06 17:00:49
这个题物品数量不能单独计数,你把输入改成for循环,把a[c].V改成a[i].V,然后后面dp的时候第一层for循环m就好了
by pdxdydz @ 2023-12-07 16:20:47
这不是#2吗