1 条题解
-
0
C :
#include <stdio.h> int max(int a,int b) { return (a>=b?a:b); } int main() { int n,v,i,j,w[101],c[101],f[100001]; while (scanf("%d %d",&v,&n)!=EOF) { for (i=1;i<=n;i++) scanf("%d %d",&c[i],&w[i]); for (i=0;i<=v;i++) f[i]=0; for (i=1;i<=n;i++) for (j=v;j>=c[i];j--) f[j]=max(f[j],f[j-c[i]]+w[i]); printf("%d\n",f[v]); } return 0; }
C++ :
#include <stdio.h> #include <string.h> //#include <windows.h> #define MAXSIZE 1001 #define MAX(a,b) (((a)>(b))?(a):(b)) int value[MAXSIZE],price[MAXSIZE]; //评价和价格 int f[MAXSIZE][MAXSIZE]; int main(int argc, char* argv[]) { // freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int money,count; //总额度money,总共点count个菜 while(scanf("%d %d",&money,&count)!=EOF) { memset(f,0,sizeof(f)); for(int i=1;i <= count;i++) { scanf("%d %d",&price[i],&value[i]); } for(int i=1;i <= count;i++) { for(int j=1;j <= money;j++) { if(price[i] <= j) //当前物品的价格小于j { f[i][j] = MAX(f[i-1][j],f[i-1][j-price[i]]+value[i]); //选择买不买当前物品i } else { f[i][j] = f[i-1][j]; //不买第i个菜 } } } printf("%d\n",f[count][money]); } // system("Pause"); return 0; }
Pascal :
program co3; var c,m:longint; v,s:longint; i,j:longint; f:array[0..1001]of longint; begin while not eoln do begin fillchar(f,sizeof(f),0); readln(c,m); for i:=1 to m do begin readln(v,s); for j:=c downto v do if f[j]<f[j-v]+s then f[j]:=f[j-v]+s; end; writeln(f[c]); end; end.
- 1
信息
- ID
- 1172
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者