社区讨论
记忆化求调
P1060[NOIP 2006 普及组] 开心的金明参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo18qga5
- 此快照首次捕获于
- 2023/10/22 17:02 2 年前
- 此快照最后确认于
- 2023/11/02 16:52 2 年前
代码如下:
CPP#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=30005;
int n,m;
int v[N],p[N];
int f[30][N];
int in(){
int x,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
for(x=0;c>='0'&&c<='9';c=getchar()){
x=x*10+(c-'0');
}
return x*f;
}
int dfs(int to,int lc){//to:当前物品 lc:剩余费用
if(f[to][lc]!=-1){
return f[to][lc];
}
if(to>m){
f[to][lc]=0;
}
int a1;
int a2;
a1=dfs(to+1,lc);
if(lc>=v[to]){
a2=dfs(to+1,lc-v[to])+v[to]*p[to];
}
return f[to][lc]=max(a1,a2);
}
int main(){
memset(f,-1,sizeof(f));
n=in();
m=in();
for(int i=1;i<=m;i++){
v[i]=in();
p[i]=in();
}
printf("%d\n",dfs(1,n));
return 0;
}
小样例输出:8482544(???)
求调
回复
共 4 条回复,欢迎继续交流。
正在加载回复...