NC220709. Cutthegoldbar
描述
输入描述
一行,为切的刀数n(1≤n≤40)
输出描述
一行,为金条有多少种长度
示例1
输入:
1
输出:
2
说明:
切一刀的情况下,显然有2,3两种长度满足每天付1节金条题意。长度为2切1刀,成两个长度为1的,每天付给导游1,付两天。长度为3,切1刀分为1和2长度,第一天付1节金条,第二天付2节找回1节金条,第三天付3节金条,共付三天。示例2
输入:
2
输出:
5
Java(javac 1.8) 解法, 执行用时: 26ms, 内存消耗: 12076K, 提交时间: 2021-04-20 17:55:52
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n=sc.nextInt(); // int[] dp=new int[n+3]; long[] kuai=new long[n+5]; long[] kuaiSum=new long[n+5]; kuai[1]=1; kuai[2]=2; kuai[3]=4; kuaiSum[1]=1; kuaiSum[2]=3; kuaiSum[3]=7; for (int i=4;i<=n+1;++i){ kuai[i]=kuaiSum[i-1]+1; kuaiSum[i]=kuaiSum[i-1]+kuai[i]; } // dp[1]=2; // dp[2]=5; // for (int i=3;i<=n;++i){ // int max=0; // for (int j=1;j<=i/2+1;++j){ // max=Math.max(max, dp[j]+dp[i-j]); // } // dp[i]=max; // } System.out.println(kuaiSum[n+1]-n); } }
C(clang11) 解法, 执行用时: 3ms, 内存消耗: 368K, 提交时间: 2021-04-20 15:32:21
#include <stdio.h> #include <stdlib.h> int main() { long long n = 0; long long a = 1; scanf("%lld", &n); a = pow((double)2, (double)(n + 1)) - 1; a = a - n - 1; printf("%lld", a + 1); return 0; }
C++(clang++11) 解法, 执行用时: 4ms, 内存消耗: 404K, 提交时间: 2021-04-23 12:51:10
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { ll n; scanf("%lld",&n); printf("%lld",(ll)pow(2,n+1)-1-n); return 0; }
Python3 解法, 执行用时: 41ms, 内存消耗: 4616K, 提交时间: 2022-04-08 08:14:24
import math m = int(input()) if m == 1: print(2) else: s = int(math.pow(2, m+1)-1-m) print(s)