zoukankan      html  css  js  c++  java
  • 10626

     1 /*
     2 题意:
     3 就是说有1,5,10三种硬币,要在自动售货机买可乐,单价8,
     4 一次只能买一瓶,然后售货机找零,然后拿着剩下的钱再买,
     5 给出要买的可乐的数量还有1,5,10三种货币的数量,问至少要给多少硬币。 
     6 例如,2 2 1 1,要买2瓶可乐,先给一次10块,剩下1,5,10的硬币 4 1 0 枚,
     7 再给一个5,3个1, 所以总共要给 5个硬币
     8 
     9 */
    10 #include<cstdio>
    11 #include<cstring>
    12 #include<algorithm>
    13 #define INF 0x3f3f3f3f
    14 using namespace std;
    15 int c,n1,n5,n10;
    16 int dp[850][250][150];
    17 int dfs(int o,int f,int t,int cnt)
    18 {
    19     if(o*1+f*5+t*10 < 8) return 0;
    20     if(cnt == c) return 0;
    21     if(dp[o][f][t] != INF) return dp[o][f][t];
    22     
    23     if(t >= 1)    
    24          dp[o][f][t]= min( dp[o][f][t] , dfs(o+2,f,t-1,cnt+1)+1);            
    25     if(f >= 2)    
    26         dp[o][f][t] = min( dp[o][f][t] , dfs(o+2,f-2,t,cnt+1)+2);    
    27     if(f >= 1 && o >= 3)    
    28         dp[o][f][t] = min(dp[o][f][t], dfs(o-3,f-1,t,cnt+1)+4);
    29     if(o>=3 && t>=1 )
    30         dp[o][f][t] = min(dp[o][f][t], dfs(o-3,f+1,t-1,cnt+1)+4);
    31     if(o >=8)
    32         dp[o][f][t] = min(dp[o][f][t], dfs(o-8,f,t,cnt+1) + 8 )    ;            
    33     return    dp[o][f][t];
    34 }
    35 int main()
    36 {
    37     int t;
    38     scanf("%d",&t);
    39     while(t--)
    40     {
    41         scanf("%d%d%d%d",&c,&n1,&n5,&n10);
    42         memset(dp,INF,sizeof(dp));
    43         dp[0][0][0]=0;
    44         dfs(n1,n5,n10,0);
    45         printf("%d
    ",dp[n1][n5][n10]);    
    46     }
    47     return 0;
    48 }
    49 
    50 /*
    51 #include<cstdio>
    52 #include<cstring>
    53 #include<algorithm>
    54 #define INF 0x3f3f3f3f
    55 using namespace std;
    56 int c,n1,n5,n10;
    57 int dp[800][200][100];
    58 int dfs(int o,int f,int t,int cnt)
    59 {
    60     if(o*1+f*5+t*10 < 8) return 0;
    61     if(cnt == 0) return 0;
    62     if(dp[o][f][t] != -1) return dp[o][f][t];
    63     
    64     dp[o][f][t] = INF;
    65     if(t >= 1)    
    66          dp[o][f][t]= min( dp[o][f][t] , dfs(o+2,f,t-1,cnt-1)+1);            
    67     if(f >= 2)    
    68         dp[o][f][t] = min( dp[o][f][t] , dfs(o+2,f-2,t,cnt-1)+2);    
    69     if(f >= 1 && o >= 3)    
    70         dp[o][f][t] = min(dp[o][f][t], dfs(o-3,f-1,t,cnt-1)+4);
    71     if(o>=3 && t>=1 )
    72         dp[o][f][t] = min(dp[o][f][t], dfs(o-3,f+1,t-1,cnt-1)+4);
    73     if(o >=8)
    74         dp[o][f][t] = min(dp[o][f][t], dfs(o-8,f,t,cnt-1) + 8 )    ;            
    75     return    dp[o][f][t];
    76 }
    77 int main()
    78 {
    79     int t;
    80     scanf("%d",&t);
    81     while(t--)
    82     {
    83         scanf("%d%d%d%d",&c,&n1,&n5,&n10);
    84         memset(dp,-1,sizeof(dp));
    85         dp[0][0][0]=0;
    86         dfs(n1,n5,n10,c);
    87         printf("%d
    ",dp[n1][n5][n10]);    
    88     }
    89     return 0;
    90 }
    91 
    92 */
  • 相关阅读:
    失落时就励志一下
    域名续费一年
    BIM新时代背景下的建筑业技术变革
    培养自信的自己
    吧台人很多
    BlogEngine学习一:操作符重载
    CSS Sprite打造个性化导航
    WinForm中的DataGridView子窗体刷新父窗体备忘
    WinForms下的SliderButtons设计
    GridView中实现DropDownList联动
  • 原文地址:https://www.cnblogs.com/ember/p/4918874.html
Copyright © 2011-2022 走看看