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 <cassert> using namespace std; int tt[200]; int vv[200]; int dp[1005][105]; int main () { int T, M; cin >> T >> M; assert(1 <= T && T <= 1000); assert(1 <= M && M <= 100); int i, j; for (i = 1; i <= M; i++) { cin >> tt[i] >> vv[i]; assert(1 <= tt[i] && tt[i] <= 100); assert(1 <= vv[i] && vv[i] <= 100); } for (i = 1; i <= T; i++) { for (j = 1; j <= M; j++) { int a = dp[i][j - 1]; if (i >= tt[j]) { int b = dp[i - tt[j]][j - 1] + vv[j]; if (b > a) a = b; } dp[i][j] = a; } } cout << dp[T][M] << endl; {char c;assert(!(cin >> c));} return 0; }
Pascal :
program bb; var w,t:array[0..105] of longint; f:array[0..1005] of longint; m,n,i,j,k,tt:longint; begin readln(tt,m); for i:=1 to m do readln(t[i],w[i]); for i:=1 to m do for j:=tt downto t[i] do if f[j-t[i]]+w[i]>f[j] then f[j]:=f[j-t[i]]+w[i]; writeln(f[tt]); end.
- 1
信息
- ID
- 848
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者