1.20小计

咳咳,昨天智障一般地把4道题全部粘了下来并贴上代码,以后还是只写点有用的吧……

From easthong☆生产调度
描述 Description
某工厂收到了n个产品的订单,这n个产品分别在A、B两个车间加工,并且必须先在A车间加工后才可以到B车间加工。
  某个产品i在A、B两车间加工的时间分别为Ai、Bi。怎样安排这n个产品的加工顺序,才能使总的加工时间最短。这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在A、B两车间加工完毕的时间。
输入格式 Input Format
第一行仅—个数据n(0

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<utility>
#include<stdio.h>
#include<cstdlib>
#include<iomanip>   //cout<<setiosflags(ios::fixed)<<setprecision(2);
#include<ctime> //double a=(double)clock(); cout<<a<<endl;
#include<vector>
#include<queue>
using namespace std;
int main()
{
    int a[1050],b[1050],c=0,d=0,n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        c+=a[i];
    }
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
        d+=b[i];
    }
    sort(a+1,a+n+1);
    sort(b+1,b+n+1);
    cout<<max(c+b[1],d+a[1])<<endl;
}

之后就真相了,记得开始的时候书上解析有好多好多,不过其实两个sort就可以解决,自己理解吧……
之后好像没什么好说的了
P1255 合唱队形 Sol.
简单的一个动态规划(喂喂)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 105;
int n,num[MAXN],ans = 1;
int dp1[MAXN],dp2[MAXN];
int main()
{
    scanf("%d",&n);
    for(int i = 1; i <= n; i ++)
        scanf("%d",&num[i]),dp1[i] = dp2[i] = 1;

        //第一遍 最长上升
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j < i; j ++)
            if(num[j] < num[i])
                dp1[i] = max(dp1[i],dp1[j] + 1);
        //第二遍 最长下降      
    for(int i = n; i >= 1; i --)
        for(int j = n; j > i; j --)
            if(num[j] < num[i])
                dp2[i] = max(dp2[i],dp2[j] + 1);
    for(int i = 1; i <= n; i ++)
        ans = max(ans,dp1[i] + dp2[i] - 1);//去掉最中间算重的人
    printf("%d\n",n - ans);
    return 0;
}

Unaccepted P1193 显示图像
这道题好像还没有过

#include <iostream>
#include <fstream>
using namespace std;
int go[4][2]={-1,0,0,1,1,0,0,-1};
int b[1000000][2],f[1000000][2],a[1001][1001],ans[1001][1001],n,m,num;
void init()//预处理,求出每一个白格子的坐标
{
    int i,j,x;
    cin>>n>>m;
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
            cin>>a[i][j];
            if (a[i][j]==1)
            {
                b[++num][0]=i;
                b[num][1]=j;
            }
        }
    }
}
void bfs(int head,int num1)//广度优先搜索
{
    int x,y,i,x1,y1,till=1;
    f[1][0]=b[num1][0]; f[1][1]=b[num1][1];//把白格子入队
    while (head<=till)
    {
        head++;
        x=f[head][0]; y=f[head][1];
        for (i=0;i<4;i++)
        {
            x1=x+go[i][0]; y1=y+go[i][1];
            if(x1>0&&x1<=n&&y1>0&&y1<=m&&a[x1][y1]==0)//判断扩展的结点是否符合条件
            {
                if (ans[x1][y1]==0||ans[x][y]+1<ans[x1][y1])// 若此结点没走过或当前答案由于之前的答案,则更新答案,同样也可以避免走回头路的情况发生
                {
                    till++;
                    f[till][0]=x1;                    //入队
                    f[till][1]=y1;
                    ans[x1][y1]=ans[x][y]+1;//更新答案
                }
            }
        }
    }
}
void print()
{
    int i,j;
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
           cout<<ans[i][j]<<' ';
        cout<<endl;
    }
}
int main()
{
    init();
    for (int i=0;i<num;i++)
        bfs(0,i+1);//以每个白格子为起点进行广度优先搜索
    print();
    return 0;
}

如上然后就没有然后了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值