codeforces 189A
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces 189A相关的知识,希望对你有一定的参考价值。
原题连接:
http://codeforces.com/problemset/problem/189/A
题意:
给你一个长度为n的布条,按给定的a,b,c三种长度切布条(得到的必须满足a,b,c三种之一)能得到的最多布条数;
思路:
(1)正常思考:那就是a,b,c之中先按最短的来切,然后第二短的,最后按最长的;
(2)但会有一些特殊的数据,如:53 10 11 23;(1)的想法得到的是4(即3给10,1个23),但正确答案是5(即3个11,2个10);
(3)根据(2)的特殊情况,那么就在添加一种切的方法:a,b,c之中先按第二短的来切,然后最短的,最后按最长的;最后取一下最大值即可;
ps:还有一种用动态规划的方式,怎奈本人水平过低,不会!!!!!!!!
1 #include<cstdio> 2 #include<string> 3 #include<iostream> 4 #include<algorithm> 5 6 using namespace std; 7 8 int main() 9 { 10 int n,a[3],d1=1,d2=1; 11 int la,lb,lc,i,j,k,x1,x2,x3,flag=0; 12 cin>>n>>a[0]>>a[1]>>a[2]; 13 sort(a,a+3); 14 la=n/a[0]; 15 lb=n/a[1]; 16 lc=n/a[2]; 17 for(i=la;i>=0;i--) 18 { 19 // printf("i=%d\n",i); 20 x1=n-i*a[0]; 21 // printf("!x1=%d\n",x1); 22 if(x1==0) 23 { 24 d1=i; 25 flag=1; 26 break; 27 } 28 for(j=0;j<=lb;j++) 29 { 30 // printf("j=%d\n",j); 31 x2=x1-j*a[1]; 32 // printf("@x2=%d\n",x2); 33 if(x2==0) 34 { 35 d1=i+j; 36 flag=1; 37 break; 38 } 39 if(x2<0) 40 break; 41 for(k=0;k<=lc;k++) 42 { 43 // printf("k=%d\n",k); 44 x3=x2-k*a[2]; 45 // printf("#x3=%d\n",x3); 46 if(x3==0) 47 { 48 d1=i+j+k; 49 flag=1; 50 break; 51 } 52 if(x3<0) 53 break; 54 } 55 if(flag) 56 break; 57 } 58 if(flag) 59 break; 60 } 61 flag=0; 62 for(i=lb;i>=0;i--) 63 { 64 // printf("i=%d\n",i); 65 x1=n-i*a[1]; 66 // printf("!x1=%d\n",x1); 67 if(x1==0) 68 { 69 d2=i; 70 flag=1; 71 break; 72 } 73 for(j=0;j<=la;j++) 74 { 75 // printf("j=%d\n",j); 76 x2=x1-j*a[0]; 77 // printf("@x2=%d\n",x2); 78 if(x2==0) 79 { 80 d2=i+j; 81 flag=1; 82 break; 83 } 84 if(x2<0) 85 break; 86 for(k=0;k<=lc;k++) 87 { 88 // printf("k=%d\n",k); 89 x3=x2-k*a[2]; 90 // printf("#x3=%d\n",x3); 91 if(x3==0) 92 { 93 d2=i+j+k; 94 flag=1; 95 break; 96 } 97 if(x3<0) 98 break; 99 } 100 if(flag) 101 break; 102 } 103 if(flag) 104 break; 105 } 106 // cout<<"d1="<<d1<<" d2="<<d2<<endl; 107 if(d1<d2) 108 d1=d2; 109 cout<<d1<<endl; 110 111 return 0; 112 }
欢迎大家评论!!!
以上是关于codeforces 189A的主要内容,如果未能解决你的问题,请参考以下文章
[Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)][C. Playing Piano](代码片段
Codeforces 86C Genetic engineering(AC自动机+DP)
CodeForces 1005D Polycarp and Div 3(思维贪心dp)