您的位置:首页 > 其它

nyoj ones (DP)

2016-01-11 21:51 309 查看

ones

时间限制:1000 ms  |           内存限制:65535 KB

难度:3

描述 Given a positive integer N (0<=N<=10000), you are to find an expression equals to N using only 1,+,*,(,). 1 should not appear continuously, i.e.
11+1 is not allowed.

输入There are multiple test cases. Each case contains only one line containing a integer N输出For each case, output the minimal number of 1s you need to get N.样例输入
2
10

样例输出
2
7


#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
ll dp[10010];
void find()
{
int i,j,k;
dp[1]=1;
for(i=2;i<10010;i++)
{
dp[i]=INF;
for(j=i-1;j>0;j--)
{
dp[i]=min(dp[i-j]+dp[j],dp[i]);//i由(i-j)和j的和得到。
if(i%j==0)//如果i%j==0,则可以通过i和j的乘积得到。
dp[i]=min(dp[i],dp[j]+dp[i/j]);
}
}
}
int main()
{
int n;
find();
while(scanf("%d",&n)!=EOF)
{
printf("%lld\n",dp
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: