[cpp]
描述:水題不解釋
#include <cstdio>
#include <cstring>
int t,n,m,sum,p,q;
int arr[1010][2],w[110],v[50010][2];
int main()
{
// freopen("a.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0; i<n; i++) scanf("%d %d",&arr[i][0],&arr[i][1]);
scanf("%d",&m);
sum=0;
for(int i=0; i<m; i++)
{
scanf("%d",&w[i]);
if(w[i]>sum) sum=w[i];
}
memset(v,0,sizeof(v));
v[0][0]=1;
for(int i=0; i<n; i++)
for(int j=sum-1; j>=0; j--) if(v[j][0])
{
p=j+arr[i][1];
q=v[j][1]+arr[i][0];
if(p<=sum&&q>v[p][1])
{
v[p][0]=1;
v[p][1]=q;
}
}
p=0;
for(int i=0; i<m; i++)
{
q=0;
for(int j=w[i]; j>=0; j--)
if(v[j][0]&&v[j][1]>q) q=v[j][1];
p+=q;
}
printf("%d\n",p);
}
return 0;
}
描述:水題不解釋
#include <cstdio>
#include <cstring>
int t,n,m,sum,p,q;
int arr[1010][2],w[110],v[50010][2];
int main()
{
// freopen("a.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0; i<n; i++) scanf("%d %d",&arr[i][0],&arr[i][1]);
scanf("%d",&m);
sum=0;
for(int i=0; i<m; i++)
{
scanf("%d",&w[i]);
if(w[i]>sum) sum=w[i];
}
memset(v,0,sizeof(v));
v[0][0]=1;
for(int i=0; i<n; i++)
for(int j=sum-1; j>=0; j--) if(v[j][0])
{
p=j+arr[i][1];
q=v[j][1]+arr[i][0];
if(p<=sum&&q>v[p][1])
{
v[p][0]=1;
v[p][1]=q;
}
}
p=0;
for(int i=0; i<m; i++)
{
q=0;
for(int j=w[i]; j>=0; j--)
if(v[j][0]&&v[j][1]>q) q=v[j][1];
p+=q;
}
printf("%d\n",p);
}
return 0;
}