记录编号 322324 评测结果 AAAAAAAAAA
题目名称 [POI 1998] 潜水员的问题 最终得分 100
用户昵称 GravatarH_Lost 是否通过 通过
代码语言 C 运行时间 0.054 s
提交时间 2016-10-14 23:41:23 内存使用 6.38 MiB
显示代码纯文本
#include <stdio.h>
#include <stdlib.h>
#define NUM 1010
#define OO 22
#define NN 80
#define MAX 99999999
int dp[NUM][OO][NN];
int n,o2,n2,onum[NUM],nnum[NUM],osum[NUM],nsum[NUM],w[NUM];
FILE *f,*g;
int min(int x,int y){return (x<y)?x:y;}
int toz(int x){return (x<0)?0:x;}
void init(){
	int i,j,k;
	fscanf(f,"%d %d\n%d",&o2,&n2,&n);
	for(i=0;i<=n;i++){
		for(j=0;j<=o2;j++){
			for(k=0;k<=n2;k++)dp[i][j][k]=MAX;
		}
	}
	fscanf(f,"%d %d %d",&onum[1],&nnum[1],&w[1]);
	osum[1]=onum[1];
	nsum[1]=nnum[1];
	for(i=2;i<=n;i++){
		fscanf(f,"%d %d %d",&onum[i],&nnum[i],&w[i]);
		osum[i]=onum[i]+osum[i-1];
		nsum[i]=nnum[i]+nsum[i-1];
	}
	dp[0][0][0]=0;
}
int main(){
	int i,j,k;
	f=fopen("ple.in","r");
	g=fopen("ple.out","w");
	init();
	for(i=1;i<=n;i++){
		for(j=0;j<=min(osum[i],o2);j++){
			for(k=0;k<=min(nsum[i],n2);k++){
				dp[i][j][k]=min(dp[i-1][j][k],dp[i-1][toz(j-onum[i])][toz(k-nnum[i])]+w[i]);
			}
		}
	}
	fprintf(g,"%d",dp[n][o2][n2]);
	fclose(f);
	fclose(g);
}