#include <iostream>
#include <cmath>
#define N 1024
using namespace std;
int w[N];
int f[N];
int main()
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
int a,b;
cin>>a>>b;
w[i]=a-b;
f[0]+=w[i];
}
for(int i=1;i<=n;i++)
f[i]=1e9;
for(int i=1;i<=n;i++)
for(int j=n;j>=1;j--)
if(abs(f[j-1]-w[i]*2)<abs(f[j]))
f[j]=f[j-1]-w[i]*2;
int minn=1e9,addr;
for(int i=0;i<=n;i++)
if(abs(minn)>abs(f[i]))
{
minn=f[i];
addr=i;
}
cout<<addr;
}
如题
和其他人的代码实现方法不太一样
利用差值做翻转
翻转后就是把 总差 减去 两个 该多米诺骨牌的差