社区讨论
为啥我用暴力还会比dp快
P11246[GESP202409 六级] 小杨和整数拆分参与者 5已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @m4f4rwtz
- 此快照首次捕获于
- 2024/12/08 12:55 去年
- 此快照最后确认于
- 2025/11/04 13:09 4 个月前
谁来分析一下
CPP#include <iostream>//暴力代码
using namespace std;
int dp[320],h,d,c,hdc=100000,num[320];
int inti(){
int i;
for(i=1;i*i<=h;i++) num[i]=i*i;
return i;
}
int main(){
scanf("%d",&h);
d=inti(),c=d-1;
for(int i=1;i<=c;i++){
int cnt=0;
for(int j=--d;j>0;j--){
while(num[j]+dp[i]<=h){
dp[i]+=num[j],cnt++;
if(cnt>=hdc) break;
}
if(cnt>=hdc) break;
}
hdc=min(cnt,hdc);
}
printf("%d",hdc);
return 0;
}
CPP#include <iostream>//dp代码
using namespace std;
const int N=1e5+10;
int n,dp[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
dp[i]=i;
for(int j=1;j<=i/j;j++){
dp[i]=min(dp[i-j*j]+1,dp[i]);
}
}
printf("%d",dp[n]);
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...