結果
問題 | No.472 平均順位 |
ユーザー |
![]() |
提出日時 | 2024-02-18 12:20:12 |
言語 | C (gcc 13.3.0) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,867 bytes |
コンパイル時間 | 211 ms |
コンパイル使用メモリ | 33,536 KB |
実行使用メモリ | 335,488 KB |
最終ジャッジ日時 | 2024-09-29 00:19:16 |
合計ジャッジ時間 | 5,497 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 10 MLE * 6 |
ソースコード
#include <stdio.h>#include <stdlib.h>#include <math.h>#define rep(i,a,b) for(i=a;i<b;i++)int cha(const void*a,const void*b){if(*(int*)a >*(int*)b){return 1;}else if(*(int*)a <*(int*)b){return -1;}else{return 0;}}int main(void){int d,i,j,kk=0,ma,mb,p;int mini=1000,k=0,qi=0,qj=0,n;int s=0,h=0;int a[5010],b[5010],c[5010],w=0;int heavy=1e9;int x_size = 3; // 1次元のサイズint y_size = 5010; // 2次元のサイズint z_size = 15010; // 3次元のサイズ// 三次元配列の動的確保int ***dp;dp = (int ***)malloc(x_size * sizeof(int**));for (int i = 0; i < x_size; ++i) {dp[i] = (int **)malloc(y_size * sizeof(int*));for (int j = 0; j < y_size; ++j) {dp[i][j] = (int *)malloc(z_size * sizeof(int));}}scanf("%d%d",&n,&p);rep(i,1,n+1){scanf("%d%d%d",&a[i],&b[i],&c[i]);}rep(i,0,n+1){rep(j,0,15001){dp[0][i][j]=heavy;}}rep(i,0,4){dp[0][0][i]=0;}rep(i,1,n+1){rep(j,0,i*3+1){if(j==0){dp[0][i][0]=dp[0][i-1][0]+a[i];}if(j==1){dp[0][i][1]=fmin(dp[0][i-1][1]+a[i],dp[0][i-1][0]+b[i]);}if(j==2){dp[0][i][2]=fmin(dp[0][i-1][0]+c[i],dp[0][i-1][1]+b[i]);dp[0][i][2]=fmin(dp[0][i][2],dp[0][i-1][2]+a[i]);}if(j==3){dp[0][i][3]=fmin(dp[0][i-1][0]+1,dp[0][i-1][1]+c[i]);dp[0][i][3]=fmin(dp[0][i][3],dp[0][i-1][2]+b[i]);dp[0][i][3]=fmin(dp[0][i][3],dp[0][i-1][3]+a[i]);}if(j>=4){dp[0][i][j]=fmin(dp[0][i-1][j-1]+b[i],dp[0][i-1][j-2]+c[i]);dp[0][i][j]=fmin(dp[0][i][j],dp[0][i-1][j-3]+1);dp[0][i][j]=fmin(dp[0][i][j],dp[0][i-1][j]+a[i]);}}}double sss=0.0;sss=(double)dp[0][n][p]/n;printf("%lf\n",sss);free(dp);}