2 solutions

  • 4
    @ 2024-3-30 22:50:52
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int a[300],b[300];
    long long dp[300][300];
    
    long long q(int x,int y)
    {
        long long ans=1;
    	long long tmp=x;
        while(y)
        {
            if(y&1)
            {
                ans=ans*tmp;
            }
            tmp*=tmp;
            y>>=1;
        }
        return ans;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
            scanf("%d%d",a+i,b+i);
        for(int i=0;i<=20;i++)
        for(int j=1;j<=200;j++)
        dp[i][j]=2147483647;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                for(int k=0;k<=i;k++)
                {
                    dp[j][i]=min(dp[j][i],dp[j-1][i-k]+a[j]*q(k,b[j]));
                }
            }
        }
        printf("%lld\n",dp[m][n]);
        return 0;
    }
    
    • 0
      @ 2024-3-30 14:52:02

      from 课件

      #include<bits/stdc++.h>
      using namespace std;
      int main(){
       long long n,m,ans,tot,a[40100],b[40100],f[40100];
      cin>>n>>m;
      for(int i=1;i<=m;i++){
      cin>>a[i]>>b[i];
      }
      f[0]=0;
      for(int i=1;i<=m;i++){
      	for(int j=n;j>=0;j--){
      		for(int z=1;z<=j;z++){
      			long long c= a[i]*pow(z,b[i]);
      			if(i==1||f[j==0]) f[j]=f[j-z]+c;
      			else f[j]=min(f[j],f[j-z]+c);
      		}
      	}
      }
      cout<<f[n]<<endl;
      }
      
      • 1

      Information

      ID
      1042
      Time
      1000ms
      Memory
      125MiB
      Difficulty
      4
      Tags
      # Submissions
      25
      Accepted
      15
      Uploaded By