#include <iostream>
using namespace std;
int map[11]={0,1,5,8,9,10,17,17,20,24,30};
int max(int a,int b)
{
return (a>b?a:b);
}
bool flag[1000];
int rom[1000];
int cut(int n)
{
if(flag[n]) return rom[n];
flag[n]=true;
if(n==0)
return 0;
int i=0;
int q=-999999;
if(n<=10)
for(i=1;i<=n;i++)
{
q=max(q,map[i]+cut(n-i));
}
else
{
for(i=1;i<=10;i++)
{
q=max(q,map[i]+cut(n-i));
}
}
rom[n]=q;
return q;
}
int main()
{
int num;
cin>>num;
// cout<<endl;
cout<<cut(num);
cout<<endl;
while(1);
}
算法导论动态规划算法的实现(带备忘的自定而下)
最新推荐文章于 2022-01-30 10:17:09 发布