卧槽,想了一晚上都没想出来,居然还去想背包,纯暴力用个递归什么的,技术弱没办法
最后还是看了哪位大神的解题报告才想出办法
言归正传
题目:http://codeforces.com/contest/189/problem/A
题目是给你一个多长的丝带,然后你要分成几段,且每段的长度必须满足等于a或者b或者c
求这个最大的段数
解法是枚举a和b的段数然后推出c的段数 ,这样能使复杂度为O(n^n)
然后求出最大的段数
最后还是看了哪位大神的解题报告才想出办法
言归正传
题目:http://codeforces.com/contest/189/problem/A
题目是给你一个多长的丝带,然后你要分成几段,且每段的长度必须满足等于a或者b或者c
求这个最大的段数
解法是枚举a和b的段数然后推出c的段数 ,这样能使复杂度为O(n^n)
然后求出最大的段数
代码如下:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int a,b,c,d,i,j,k,m,n;
int main()
{
while(scanf("%d%d%d%d",&d,&a,&b,&c)==4)
{
int max=0;
for(i=0;i*a<=d;i++)
{
for(j=0;i*a+j*b<=d;j++)
{
if((d-i*a-j*b)%c==0)
{
if(i+j+(d-i*a-j*b)/c>max)
max=i+j+(d-i*a-j*b)/c;
}
}
}
printf("%d\n",max);
}
}