1.20小计

来源:互联网 发布:unity3d密室逃脱代码 编辑:程序博客网 时间:2024/04/29 05:30

咳咳,昨天智障一般地把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;}

如上然后就没有然后了

0 0
原创粉丝点击