链接:
https://codeforces.com/problemset/problem/189/A
题意:
把n分成多个a,b,c分的越多越好
输入
5 5 3 2
输出量
2
输入
7 5 5 2
输出量
2
解:
(1<=n,a,b,c<=4000)
暴力就vans,冲冲冲
实际代码:
#include<iostream>
using namespace std;
int main()
{
int n,a,b,c;
cin>>n>>a>>b>>c;
int max=0;
for(int i=0;i*a<=n;i++)
{
for(int j=0;i*a+j*b<=n;j++)
{
if((n-i*a-j*b)%c==0)
{
if((n-i*a-j*b)/c+i+j>max)
{
max=(n-i*a-j*b)/c+i+j;
}
}
}
}
cout<<max<<endl;
}
限制:
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
补充一下
dp写法:
状态转移公式
dp[i]=max(dp[i],dp[i-a[j]]+1);
当继承状态0时,一定要i==a[j],这样才是(刚好分成)
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int a[4],dp[4005];
int main()
{
int n;
cin>>n>>a[1]>>a[2]>>a[3];
/*
for(int i=0;i<4005;i++)
{
dp[i]=-10000;
}
*/
dp[0]=0;
for(int i=0;i<=n;i++)
{
for(int j=1;j<=3;j++)
{
if(i>=a[j])
{
if(i-a[j]==0&&dp[i-a[j]]==0)
{
dp[i]=max(dp[i],dp[i-a[j]]+1);
}
else if(dp[i-a[j]]!=0)dp[i]=max(dp[i],dp[i-a[j]]+1);
}
}
}
//cout<<dp[1]<<endl;
cout << dp[n];
return 0;
}