关于赋初始值
查看原帖
关于赋初始值
315205
Kniqht楼主2022/8/19 16:36

有没有大佬帮忙看一下,感谢!!!!

这个是80分:

//f(i,j)表示前i个论文,目前用了前j个课题花费的最少时间
#include<iostream>
#include<cstring>
#include<string>
#include<queue>
#include<utility>
#include<cmath>
#define int unsigned long long
using namespace std;
const int N=310;
int n,m,f[N][N];
struct num{
    int x,y;
}a[N];
int get(int i,int len){
    int ans=a[i].x;
    for(int c=1;c<=a[i].y;c++)
        ans*=len;
    return ans;
}
signed main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++) cin>>a[i].x>>a[i].y;
    memset(f,0x3f,sizeof(f));
    f[0][0]=0;//我是这样初始化的
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int k=0;k<=i;k++){
                int t=get(j,k);
                f[i][j]=min(f[i][j],f[i-k][j-1]+t);
            }
    cout<<f[n][m];
    return 0;
}
/*
f(i,j)=f(i-k,j-1)+get()
i,j,k
*/

这个是100分(按照第一篇题解的初始化):

#include<iostream>
#include<cstring>
#include<string>
#include<queue>
#include<utility>
#include<cmath>
#define int unsigned long long
using namespace std;
const int N=310;
int n,m,f[N][N];
struct num{
    int x,y;
}a[N];
int get(int i,int len){
    int ans=a[i].x;
    for(int c=1;c<=a[i].y;c++)
        ans*=len;
    return ans;
}
signed main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++) cin>>a[i].x>>a[i].y;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int k=0;k<=i;k++){
                int t=get(j,k);
                if(!f[i][j]||j==1) f[i][j]=f[i-k][j-1]+t;//这个初始化直接在代码中
                else f[i][j]=min(f[i][j],f[i-k][j-1]+t);
            }
    cout<<f[n][m];
    return 0;
}
/*
f(i,j)=f(i-k,j-1)+get()
i,j,k
*/

2022/8/19 16:36
加载中...