和 数字金字塔 几乎一样
f[i[[j][s] s表示当前的和
#include<iostream> #include <cstring> #include <algorithm> using namespace std; const int N=90; #define int long long int n,S,a[N][N],f[N][N][502]; main(){ //freopen("in","r",stdin); freopen("out","w",stdout); while(cin>>n>>S,n){ memset(f,0,sizeof f); int i,j; for(i=1;i<=n;i++) for(j=1;j<=n-i+1;j++) cin>>a[i][j]; for(i=2;i<=n;i++) for(j=1;j<=i;j++) cin>>a[i+n-1][j]; for(j=1;j<=n;j++) f[2*n-1][j][a[2*n-1][j]]=1; for(i=2*n-2;i>=n;i--) for(j=1;j<=i-n+1;j++) for(int s=a[i][j];s<=S;s++) f[i][j][s]=f[i+1][j][s-a[i][j]]+f[i+1][j+1][s-a[i][j]]; for(i=n-1;i>=1;i--) for(j=1;j<=n-i+1;j++) for(int s=a[i][j];s<=S;s++){ f[i][j][s]=f[i+1][j][s-a[i][j]]+f[i+1][j-1][s-a[i][j]]; } long long ans=0; int id=0; for(i=1;i<=n;i++){ if(f[1][i][S]){ ans+=f[1][i][S]; if(id==0) id=i; } } cout<<ans<<endl; if(id==0){cout<<endl;continue;} cout<<id-1<<' '; for(i=1;i<n;i++){ S-=a[i][id]; if(f[i+1][id-1][S]) cout<<'L',id--; else cout<<'R'; } for(i=n;i<2*n-1;i++){ S-=a[i][id]; if(f[i+1][id][S]) cout<<'L'; else cout<<'R',id++; } cout<<endl; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!