C++40分求助

P1775 石子合并(弱化版)

@[rainfox](/user/1033626) 本题是 $dp$ ,不是贪心
by danlao @ 2024-02-16 12:00:08


@[yaodiguoan](/user/1023793) 楼上正解,这题是 DP,贪心是不对的(当然如果把题面改成取任意两堆就是贪心了)
by masonxiong @ 2024-02-16 12:23:49


@[rainfox](/user/1033626) 这题是这样写的! ```cpp #include <iostream> #include <cstring> using namespace std; #define hh printf("\n") #define kg printf(" ") #define cg ch=getchar() inline int read(){ int x=0,f=1;char cg; while (ch<'0'||ch>'9'){if(ch=='-')f=-1;cg;} while (ch>='0'&&ch<='9'){x=x*10+ch-'0';cg;} return x*f; } inline void write(int x){ if(x<0){putchar('-');x=-x;} if(x>9)write(x/10); putchar(x%10+'0'); } int n,a[310],sum[310],dp[310][310]; int main(){ n=read(); memset(dp,0x3f,sizeof(dp)); for(int i=1;i<=n;i++){ a[i]=read(); dp[i][i]=0; sum[i]=sum[i-1]+a[i]; } for(int len=2;len<=n;len++) for(int l=1;l+len-1<=n;l++){ int r=l+len-1; for(int k=l;k<r;k++) dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]+sum[r]-sum[l-1]); } write(dp[1][n]); return 0; } ```
by danlao @ 2024-02-16 12:35:57


感谢各位大佬
by rainfox @ 2024-02-16 17:37:01


|