多米诺骨牌

来源:互联网 发布:rar解压 for mac 编辑:程序博客网 时间:2024/05/01 05:41

f[i][j]表示前i个的差是多少的最小步

f[i][j]=min(f[i1][j+a[i]b[i]],f[i1][ja[i]+b[i]]);

递推过去,最后求最小差

#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int M=5000;int V,n,w[1999],v[1999],k[1999],f[1999][2*M+10];int main(){    scanf("%d%",&n);    for(int i=1;i<=n;i++) scanf("%d%d",&v[i],&w[i]);    memset(f,127,sizeof(f));    f[0][0+M]=0;    for(int i=1;i<=n;i++)    for(int j=-M;j<=M;j++){        f[i][j+M]=min(f[i-1][j-v[i]+w[i]+M],f[i-1][j-w[i]+v[i]+M]+1);    }    for(int i=0;i<=M;i++)    if(f[n][M-i]<1000||f[n][i+M]<1000) {        printf("%d",min(f[n][i+M],f[n][M-i]));break;    }} 
原创粉丝点击