标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 25653 | Accepted: 9147 |
Description
Input
Output
Sample Input
1 3 3 100 25 150 35 80 25 2 120 80 155 40 2 100 100 120 110
Sample Output
0.649
思路:定义dp[i][j]为前i个设备的容量为j的最小费用;
状态转移方程为:dp[i][j]=min(dp[i][j],dp[i-1][j]+p);
边界:dp[1][j]=p;
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cstdlib> 6 #include<iomanip> 7 #include<cmath> 8 #include<vector> 9 #include<queue> 10 #include<stack> 11 using namespace std; 12 #define PI 3.141592653589792128462643383279502 13 const int inf=0x3f3f3f3f; 14 int t,n,j,ss,m[120][1200]; 15 int main(){ 16 //#ifdef CDZSC_June 17 //freopen("in.txt","r",stdin); 18 //#endif 19 //std::ios::sync_with_stdio(false); 20 scanf("%d",&t); 21 while(t--){ 22 scanf("%d",&n); 23 memset(m,0x3f,sizeof(m)); 24 for(int i=1;i<=n;i++){ 25 int num; 26 scanf("%d",&num); 27 for(j=1;j<=num;j++){ 28 int b,p; 29 scanf("%d%d",&b,&p); 30 if(i==1){m[1][b]=min(m[1][b],p);} 31 else { 32 for(int k=0;k<1200;k++){ 33 if(m[i-1][k]!=inf){ 34 if(k<=b) 35 m[i][k]=min(m[i][k],m[i-1][k]+p); 36 else 37 m[i][b]=min(m[i][b],m[i-1][k]+p); 38 } 39 } 40 } 41 } 42 } 43 double ans=0; 44 for(int i=0;i<1200;i++){ 45 if(m[n][i]!=inf){ 46 double k=(double)i/m[n][i]; 47 if(k>ans) ans=k; 48 } 49 } 50 printf("%.3lf\n",ans); 51 } 52 return 0; 53 }
标签:
原文地址:http://www.cnblogs.com/yoyo-sincerely/p/5092736.html