设为首页 加入收藏

TOP

hdu 1864 实数离散化+动态规划+滚动数组
2015-11-21 00:56:01 来源: 作者: 【 】 浏览:1
Tags:hdu 1864 实数 离散 动态 规划 滚动
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include
            #include 
            
              using namespace std; #define INF 0x2fffffff #define LL long long #define MAX(a,b) ((a)>(b))?(a):(b) #define MIN(a,b) ((a)<(b))?(a):(b) double q; int n; double val[100][26]; int v[100]; int dp[3000050]; int flag[100]; int main(){ while(scanf(%lf %d,&q,&n),n){ int m; memset(val,0,sizeof(val)); for(int i = 0;i < n;i++){ scanf(%d,&m); for(int j = 0;j < m;j++){ char ch; double v; scanf( %c:%lf,&ch,&v); val[i][ch-'A'] += v; } } memset(flag,0,sizeof(flag)); for(int i = 0;i < n;i++){ double sum = 0; for(int j = 0;j < 26;j++){ if(val[i][j] > 600){ flag[i] = 1; } if(j >= 3 && val[i][j]) flag[i] = 1; sum += val[i][j]; } if(sum > 1000){ flag[i]= 1; } } int g = 1; int tt= 0; for(int i = 0;i < n;i++){ if(!flag[i]){ double sum = 0; for(int j = 0;j < 3;j++){ sum += val[i][j]; } v[g] = sum*100; tt += v[g++]; } } memset(dp,0,sizeof(dp)); int cc = min(tt,(int)(q*100)); for(int i = 1;i < g;i++){ for(int j = cc;j >= v[i];j--){ dp[j] = max(dp[j],dp[j-v[i]]+v[i]); } } printf(%.2lf ,dp[cc]/100.0); } return 0; } 
            
          
         
        
       
      
     
    
   

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇_DataStructure_C_Impl:链栈 下一篇hdu 3746 Cyclic Nacklace(求最..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: