码迷,mamicode.com
首页 > 其他好文 > 详细

第十一周 5.9 --- 5.15

时间:2016-05-09 08:28:05      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

哇呀哇呀,这周三门考试.........酸爽

总之希望这周的rp好一点点..

 

5.9

c.柱爷的下凡

求三个硬币的面值,使得构成 1 到 n 面值得平均硬币数量最少

平均数量最少就要总数量最少,dp[i] 表示构成面额 i 需要的最少的硬币数量

然后肯定有 1 ,再枚举 另外两种硬币的面值

不过....好想说时间卡得好紧啊,都枚举到 n 会 T,打表发现面值不会超过 40,于是枚举到 40才水果

TwT/....................

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 const int maxn = 505;
 8 int dp[maxn],n;
 9 const int INF = (1<<30)-1;
10 
11 void solve(){
12     int ans = INF,x = 2,y = 3;
13     for(int a1 = 2;a1 <= min(40,n);a1++){
14         for(int a2 = a1+1;a2 <= min(40,n);a2++){
15             if(a1+a2 > n) continue;
16             for(int i = 1;i <= n;i++) dp[i] = INF;
17             dp[0] = 0; 
18             int tmp = 0;
19             for(int i = 1;i <= n;i++){
20                 if(i >= 1) dp[i] = min(dp[i],dp[i-1]);
21                 if(i >= a1) dp[i] = min(dp[i],dp[i-a1]);
22                 if(i >= a2) dp[i] = min(dp[i],dp[i-a2]);
23                 dp[i] = dp[i]+1;
24                 tmp += dp[i];
25             //    printf("a1 = %d a2 = %d dp[%d] = %d\n",a1,a2,i,dp[i]);
26             }
27             
28             if(tmp < ans){
29                 ans = tmp;
30                 x = a1;y = a2;
31             }
32         }
33     }
34     printf("1 %d %d\n",x,y);
35 }
36 
37 int main(){
38     int T;
39     scanf("%d",&T);
40     while(T--){
41         scanf("%d",&n);
42         solve();
43     }
44     return 0;
45 }
View Code

 

第十一周 5.9 --- 5.15

标签:

原文地址:http://www.cnblogs.com/wuyuewoniu/p/5472501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!