杭电10:Pty loves lines

题面:给定n条直线,三线不公点,求交点可能的结果。

解析:转化为求下公式的所以可能。
图片说明
a[i]为用i条线最多有多少交线,下文称价值。

因为存在i=1,没有交点,即有花费没有价值,若有满足条件的价值s,就可以出现x(x>s)。

用f[x]存满足用了n条线的最小价值和。
相当于完全背包,有一个n容量的背包,存在1……n种物品,价值a[i],每个物品无限多,求填满背包的最小价值。
代码
#include <bits/stdc++.h>

using namespace std;
int f[490000],n,t;
int ask[1000];
int main() {
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        ask[n]=1;
    }
    memset(f,0x3f3f3f3f,sizeof(f));
    f[0]=0;
    int m=700*700/2;
    for(int i=1;i<=n;i++){
        for(int j=0;j<=m-1;j++){
            int k=j+i*(i-1)/2;
            if(k<=m)
            f[k]=min(f[k],f[j]+i);
        }
        if(ask[i]){
            int mm=i*(i-1)/2;
            for(int j=0;j<=mm;j++)
            if(f[mm-j]<=i) printf("%d ",j);
            printf("\n");
        }

    }


}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务