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
上传者
-
TC_胡仁东
ac代码
#include<stdio.h> #include<string.h> #define INF 0xfffffff #define min(a,b) (a>b?b:a) long long dp[10001]; void fun() { int i,j,k; dp[1]=1; for(i=2;i<10001;i++) { dp[i]=INF; for(j=i-1;j>0;j--) { dp[i]=min(dp[i-j]+dp[j],dp[i]); if(i%j==0) dp[i]=min(dp[i],dp[j]+dp[i/j]); } } } int main() { int n; fun(); while(scanf("%d",&n)!=EOF) printf("%lld\n",dp[n]); }