解题思路:
与一楼的思路一致,但因为用set会超时,所以采用了以下方法优化
参考代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int g[100005],cut=0,ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int w;
cin>>w;
cut++;
if(g[w]==0) g[w]=cut;
for(int j=1;j<100005;j++){
if(g[j]>0&&g[j]<cut){
if(g[j+w]==0) g[j+w]=cut;
if(g[abs(j-w)]==0) g[abs(j-w)]=cut;
}
}
}
for(int j=1;j<100005;j++){
if(g[j]>0) ans++;
}
cout<<ans;
return 0;
}
0.0分
0 人评分
A+B for Input-Output Practice (III) (C++代码)浏览:898 |
C二级辅导-计负均正 (C语言代码)浏览:607 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:443 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:783 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:1114 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:541 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:687 |
打印十字图 (C语言代码)浏览:2822 |
蚂蚁感冒 (C语言代码)浏览:816 |
复数求和 (C语言代码)浏览:994 |