采药 C语言

Python011

采药 C语言,第1张

#include <stdio.h>

#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")

}