80分代码:
#include<bits/stdc++.h>
#define F(_b,_e) for(int i=_b;i<=_e;i++)
#define int long long
using namespace std;
inline int read(){
int f=1,x=0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return f*x;
}
void write(int x) {
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
int a[205],b[205];
int f[25][300];
int res(int t,int e,int p){
F(1,p)
t*=e;
return t;
}
signed main(){
//ios::sync_with_stdio(0);
int n,m;
m=read();
n=read();
for(int i=1;i<=n;i++){
a[i]=read();
b[i]=read();
}
memset(f,0x3f,sizeof(f));
for(int i=0;i<=m;i++)
f[0][i]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=0;k<=j;k++){
if(i==1)
f[i][j]=f[i-1][j-k]+res(a[i],k,b[i]);
f[i][j]=min(f[i][j],f[i-1][j-k]+res(a[i],k,b[i]));
}
}
}
cout<<f[n][m];
return 0;
}
100分代码:
#include<bits/stdc++.h>
#define F(_b,_e) for(int i=_b;i<=_e;i++)
#define int long long
using namespace std;
inline int read(){
int f=1,x=0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return f*x;
}
void write(int x) {
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
int a[205],b[205];
int f[25][300];
int res(int t,int e,int p){
F(1,p)
t*=e;
return t;
}
signed main(){
//ios::sync_with_stdio(0);
int n,m;
m=read();
n=read();
for(int i=1;i<=n;i++){
a[i]=read();
b[i]=read();
}
/*memset(f,0x3f,sizeof(f));
for(int i=0;i<=m;i++)
f[0][i]=0;*/
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=0;k<=j;k++){
if(i==1||f[i][j]==0)
f[i][j]=f[i-1][j-k]+res(a[i],k,b[i]);
f[i][j]=min(f[i][j],f[i-1][j-k]+res(a[i],k,b[i]));
}
}
}
cout<<f[n][m];
return 0;
}
仅仅把 memset+初始化改成了特判,就过了,请问各位是因为什么原因?