滴滴解题报告
//本渣渣第一次AK,特分享一波(PS:大神跳过就行了)
第一题注意输入可能是负数
第二题用long long就OK了
第一题 #include<cstdio> #include<algorithm> using namespace std; const char buf[30]="0123456789ABCDEF"; int n,m; char ans[40]; void solve(){ if(!n){ printf("0\n"); return; } int id=0; while(n){ ans[id++]=buf[n%m]; n/=m; } for(int i=id-1;i>=0;i--){ putchar(ans[i]); } printf("\n"); } int main(){ while(scanf("%d%d",&n,&m)==2){ if(n<0){ printf("-"); n=-n; } solve(); } return 0; } 第二题: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=1005; int n,m; long long dp[maxn][maxn]; int a[maxn]; void init(){ for(int i=0;i<n;i++){ fill(dp[i],dp[i]+m,0); } dp[0][0]=1; } void print(){ for(int i=0;i<=n;i++){ for(int j=0;j<=m;j++){ printf("%d ",dp[i][j]); } printf("\n"); } } void solve(){ for(int i=0;i<n;i++){ for(int j=0;j<=m;j++){ if(j>=a[i]){ dp[i+1][j]=dp[i][j]+dp[i][j-a[i]]; } else{ dp[i+1][j]=dp[i][j]; } } } //print(); printf("%lld\n",dp[n][m]); } int main(){ //freopen("in.txt","r",stdin); while(scanf("%d%d",&n,&m)==2){ for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); init(); solve(); } return 0; }#滴滴#