1 条题解

  • 0
    @ 2024-12-24 9:54:31

    C++ :

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <vector>
    #include <utility>
    #include <set>
    //#define LOCAL
    #define maxe 105
    #define maxd 105
    #define maxn 25
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> P;
    int n,E,D;
    int dp[maxe][maxd],f[maxn][maxd];
    int main(){
    	#ifdef LOCAL
    	freopen("sample.in","r",stdin);
    	freopen("sample.out","w",stdout);
    	#endif
    	scanf("%d%d%d",&n,&E,&D);
    	if(E < D){
    		puts("0");
    		return 0;
    	}
    	memset(dp,0x3f,sizeof(dp));
    	for(int i=0;i<=E;i++) dp[i][0] = 0;
    	for(int i=1;i<=E;i++){
    		for(int j=1;j<=D;j++){
    			for(int k=1;k <= j && k * k <= i;k++){
    				dp[i][j] = min(dp[i][j],dp[i - k * k][j - k] + 1);
    			}
    		}
    	}
    	memset(f,0x3f,sizeof(f));
    	f[0][0] = 0;
    	for(int i=1;i<=n;i++){
    		for(int j=0;j<=D;j++){
    			int p = D - j;
    			for(int k=0;k<=j;k++){
    				f[i][j] = min(f[i][j],f[i - 1][j - k] + dp[E - p][k]);
    			}
    		}
    	}
    	printf("%d\n",f[n][D]);
    	return 0;
    }
    
    
    
    • 1

    信息

    ID
    1196
    时间
    1000ms
    内存
    30MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者