[P1220]关路灯

来源:互联网 发布:mac word 迅雷下载 编辑:程序博客网 时间:2024/04/27 19:37

原题链接

这是一道DP题
但是用爆搜也能过
跑的还挺快的

就是直接暴力搜索
跑到边界去关灯

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<ctime>#include<cstdlib>#include<climits>#include<queue>#include<vector>#include<map>#define LL long long#define MOD 1000000007using namespace std;int ans=9999999,p[55],w[55],tot,n,c;bool vis[55];void dfs(int pos,int cost,int cnt,int all){    if(cost>ans) return;    if(cnt>=n)    {        ans=cost;        return;    }    int l,r;    l=pos;r=pos;    while(vis[l]&&l>=1) l--;    while(vis[r]&&r<=n) r++;    if(l>=1)    {        vis[l]=1;        dfs(l,cost+all*(p[pos]-p[l]),cnt+1,all-w[l]);        vis[l]=0;    }    if(r<=n)    {        vis[r]=1;        dfs(r,cost+all*(p[r]-p[pos]),cnt+1,all-w[r]);        vis[r]=0;    }}int main(){    int i;    scanf("%d%d",&n,&c);    for(i=1;i<=n;i++)    {        scanf("%d%d",&p[i],&w[i]);        tot+=w[i];          }    tot-=w[c];    vis[c]=1;    dfs(c,0,1,tot);    printf("%d",ans);    return 0;}