1 条题解
-
0
C :
#include<stdio.h> int max(int a,int b){ return a>b?a:b; } struct Goods{//物品结构体 int w;//物品体积 int v;//物品价值 }list[101]; int status[1001];//体积为j时能装的最大总价值 int main(){ int s,n,i,j;//总容量s,n个物品 while(scanf("%d%d",&s,&n)!=EOF&&s!=0&&n!=0){ for(i=1;i<=n;i++){//输入每个物品信息 scanf("%d%d",&list[i].w,&list[i].v); } for(j=0;j<=s;j++){//初始化 status[j]=0; } for(i=1;i<=n;i++){//循环每一个物品 for(j=s;j>=list[i].w;j--){//如果能放进去 status[j]=max(status[j],status[j-list[i].w]+list[i].v);//放进去之后的总价值=max(不变,此物品价值+剩余的空间能放的最大总价值) } } printf("%d\n",status[s]); } return 0; }
C++ :
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int i,j,T,m,t[1001],c[1001],f[1001]; int main() { scanf("%d%d",&T,&m); for(i=1;i<=m;i++) scanf("%d%d",&t[i],&c[i]); for(i=1;i<=m;i++) { for(j=T;j>=t[i];j--) { f[j]=max(f[j],f[j-t[i]]+c[i]); } } cout<<f[T]; return 0; }
Pascal :
var w,c,f:array[0..1001]of longint; i,j,t,n:longint; begin read(t,n); for i:=1 to n do read(w[i],c[i]);fillchar(f,sizeof(f),0); for i:=1 to n do for j:=t downto w[i] do if f[j-w[i]]+c[i]>f[j] then f[j]:=f[j-w[i]]+c[i]; writeln(f[t]); end.
- 1
信息
- ID
- 1787
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者