题目:http://codevs.cn/problem/2189/
通过增加一维,将最优性转化为可行性。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,a[30][30]; bool f[30][30][105]; int main() { // memset(f,-2,sizeof f); scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) { scanf("%d",&a[i][j]); if(i==n) f[i][j][a[i][j]%100]=1; } for(int i=n-1;i>=1;i--) for(int j=1;j<=n;j++) for(int k=99;k>0;k--) { f[i][j][k]=max(f[i+1][j][(k-a[i][j]+100)%100], f[i+1][j+1][(k-a[i][j]+100)%100]); } for(int i=99;i>=0;i--) if(f[1][1][i]) { printf("%d",i); return 0; } }
本文介绍了一种动态规划问题的解决策略,通过增加一维将最优性问题转化为可行性问题,以解决CodeVS平台上的特定编程挑战。文章详细展示了如何使用三维数组进行状态转移,以及如何在代码中实现这一思想。
2320

被折叠的 条评论
为什么被折叠?



