#include <string.h>
#define max(a,b) ((a)>(b)?(a):(b))
int a[1001]
int main(){
int T,M
scanf("%d%d",&T,&M)
memset(a,0,sizeof(a))
for(int i=0i<Mi++){
int t,v
scanf("%d%d",&t,&v)
for(int j=T-tj>0j--)if(a[j])
a[j+t] = max(a[j+t],a[j] + v)
a[t] = max(a[t],v)
}
int ans = 0
for(int i=1i<=Ti++)
ans = max(ans,a[i])
printf("%d\n",ans)
return 0
}
这题目不过是计算给定时间裏,给定样本中所能取得的最大数量和罢了,按照你的问题,根本都不用去排程计算,就能回答了,答案是如果给定时间不是太小,小到小於采集时间最小的某种草药所需的时间之外,其他情况答案都是“是”。你的题目只是可不可以,没有要求计算答案。根本只是个是非题。
#include <stdio.h>#include <string.h>
int f[1000+10],w[1000+10],v[1000+10]
int max(int x,int y)
{
if(x>y) return x
elsereturn y
}
int main()
{
int t,m,i,j
memset(f,0,sizeof(f))
scanf("%d %d",&t,&m)
for (i=1i<=mi++) scanf("%d %d",&w[i],&v[i])
for (i=1i<=mi++){
for (j=tj>=w[i]j--){
if(w[i]<=t)
f[j]=max(f[j-w[i]]+v[i],f[j])
}
}
printf("%d",f[t])
printf("\n")
}